From owner-p4-projects@FreeBSD.ORG Sun Oct 31 21:47:39 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C971A16A4D0; Sun, 31 Oct 2004 21:47:38 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 827A316A4CE for ; Sun, 31 Oct 2004 21:47:38 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5B67443D5F for ; Sun, 31 Oct 2004 21:47:38 +0000 (GMT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i9VLlcOS068657 for ; Sun, 31 Oct 2004 21:47:38 GMT (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i9VLlb4x068654 for perforce@freebsd.org; Sun, 31 Oct 2004 21:47:37 GMT (envelope-from peter@freebsd.org) Date: Sun, 31 Oct 2004 21:47:37 GMT Message-Id: <200410312147.i9VLlb4x068654@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Subject: PERFORCE change 64027 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 31 Oct 2004 21:47:39 -0000 http://perforce.freebsd.org/chv.cgi?CH=64027 Change 64027 by peter@peter_overcee on 2004/10/31 21:46:38 IFC @64024 Affected files ... .. //depot/projects/hammer/sys/net/if_tap.c#18 integrate .. //depot/projects/hammer/sys/net/if_tun.c#21 integrate .. //depot/projects/hammer/sys/netgraph/ng_device.c#11 integrate .. //depot/projects/hammer/sys/netgraph/ng_pppoe.c#13 integrate .. //depot/projects/hammer/sys/vm/vm_zeroidle.c#16 integrate Differences ... ==== //depot/projects/hammer/sys/net/if_tap.c#18 (text+ko) ==== @@ -31,7 +31,7 @@ */ /* - * $FreeBSD: src/sys/net/if_tap.c,v 1.47 2004/09/17 03:55:50 rwatson Exp $ + * $FreeBSD: src/sys/net/if_tap.c,v 1.48 2004/10/31 17:39:46 glebius Exp $ * $Id: if_tap.c,v 0.21 2000/07/23 21:46:02 max Exp $ */ @@ -800,8 +800,8 @@ { struct tap_softc *tp = dev->si_drv1; struct ifnet *ifp = &tp->tap_if; - struct mbuf *top = NULL, **mp = NULL, *m = NULL; - int error = 0, tlen, mlen; + struct mbuf *m; + int error = 0; TAPDEBUG("%s writting, minor = %#x\n", ifp->if_xname, minor(dev)); @@ -815,42 +815,16 @@ return (EIO); } - tlen = uio->uio_resid; - /* get a header mbuf */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) - return (ENOBUFS); - mlen = MHLEN; - - top = 0; - mp = ⊤ - while ((error == 0) && (uio->uio_resid > 0)) { - m->m_len = min(mlen, uio->uio_resid); - error = uiomove(mtod(m, void *), m->m_len, uio); - *mp = m; - mp = &m->m_next; - if (uio->uio_resid > 0) { - MGET(m, M_DONTWAIT, MT_DATA); - if (m == NULL) { - error = ENOBUFS; - break; - } - mlen = MLEN; - } - } - if (error) { + if ((m = m_uiotombuf(uio, M_DONTWAIT, 0)) == NULL) { ifp->if_ierrors ++; - if (top) - m_freem(top); return (error); } - top->m_pkthdr.len = tlen; - top->m_pkthdr.rcvif = ifp; + m->m_pkthdr.rcvif = ifp; /* Pass packet up to parent. */ - (*ifp->if_input)(ifp, top); + (*ifp->if_input)(ifp, m); ifp->if_ipackets ++; /* ibytes are counted in parent */ return (0); ==== //depot/projects/hammer/sys/net/if_tun.c#21 (text+ko) ==== @@ -13,7 +13,7 @@ * UCL. This driver is based much more on read/write/poll mode of * operation though. * - * $FreeBSD: src/sys/net/if_tun.c,v 1.145 2004/10/11 07:28:36 glebius Exp $ + * $FreeBSD: src/sys/net/if_tun.c,v 1.146 2004/10/31 17:39:46 glebius Exp $ */ #include "opt_atalk.h" @@ -739,8 +739,8 @@ { struct tun_softc *tp = dev->si_drv1; struct ifnet *ifp = &tp->tun_if; - struct mbuf *top, **mp, *m; - int error=0, tlen, mlen; + struct mbuf *m; + int error = 0; uint32_t family; int isr; @@ -757,58 +757,32 @@ TUNDEBUG(ifp, "len=%d!\n", uio->uio_resid); return (EIO); } - tlen = uio->uio_resid; - /* get a header mbuf */ - MGETHDR(m, M_DONTWAIT, MT_DATA); - if (m == NULL) - return (ENOBUFS); - mlen = MHLEN; - - top = NULL; - mp = ⊤ - while (error == 0 && uio->uio_resid > 0) { - m->m_len = min(mlen, uio->uio_resid); - error = uiomove(mtod(m, void *), m->m_len, uio); - *mp = m; - mp = &m->m_next; - if (uio->uio_resid > 0) { - MGET (m, M_DONTWAIT, MT_DATA); - if (m == 0) { - error = ENOBUFS; - break; - } - mlen = MLEN; - } - } - if (error) { - if (top) - m_freem (top); + if ((m = m_uiotombuf(uio, M_DONTWAIT, 0)) == NULL) { ifp->if_ierrors++; return (error); } - top->m_pkthdr.len = tlen; - top->m_pkthdr.rcvif = ifp; + m->m_pkthdr.rcvif = ifp; #ifdef MAC - mac_create_mbuf_from_ifnet(ifp, top); + mac_create_mbuf_from_ifnet(ifp, m); #endif /* Could be unlocked read? */ mtx_lock(&tp->tun_mtx); if (tp->tun_flags & TUN_IFHEAD) { mtx_unlock(&tp->tun_mtx); - if (top->m_len < sizeof(family) && - (top = m_pullup(top, sizeof(family))) == NULL) + if (m->m_len < sizeof(family) && + (m = m_pullup(m, sizeof(family))) == NULL) return (ENOBUFS); - family = ntohl(*mtod(top, u_int32_t *)); - m_adj(top, sizeof(family)); + family = ntohl(*mtod(m, u_int32_t *)); + m_adj(m, sizeof(family)); } else { mtx_unlock(&tp->tun_mtx); family = AF_INET; } - BPF_MTAP2(ifp, &family, sizeof(family), top); + BPF_MTAP2(ifp, &family, sizeof(family), m); switch (family) { #ifdef INET @@ -838,9 +812,9 @@ /* First chunk of an mbuf contains good junk */ if (harvest.point_to_point) random_harvest(m, 16, 3, 0, RANDOM_NET); - ifp->if_ibytes += top->m_pkthdr.len; + ifp->if_ibytes += m->m_pkthdr.len; ifp->if_ipackets++; - netisr_dispatch(isr, top); + netisr_dispatch(isr, m); return (0); } ==== //depot/projects/hammer/sys/netgraph/ng_device.c#11 (text+ko) ==== @@ -26,14 +26,14 @@ * This node presents a /dev/ngd%d device that interfaces to an other * netgraph node. * - * $FreeBSD: src/sys/netgraph/ng_device.c,v 1.13 2004/10/28 18:23:44 glebius Exp $ + * $FreeBSD: src/sys/netgraph/ng_device.c,v 1.14 2004/10/31 17:32:51 glebius Exp $ * */ #if 0 -#define DBG printf("ng_device: %s\n", __func__ ) +#define DBG do { printf("ng_device: %s\n", __func__ ); } while (0) #else -#define DBG +#define DBG do {} while (0) #endif #include ==== //depot/projects/hammer/sys/netgraph/ng_pppoe.c#13 (text+ko) ==== @@ -36,13 +36,13 @@ * * Author: Julian Elischer * - * $FreeBSD: src/sys/netgraph/ng_pppoe.c,v 1.68 2004/10/28 18:23:44 glebius Exp $ + * $FreeBSD: src/sys/netgraph/ng_pppoe.c,v 1.69 2004/10/31 17:32:51 glebius Exp $ * $Whistle: ng_pppoe.c,v 1.10 1999/11/01 09:24:52 julian Exp $ */ #if 0 -#define DBG printf("pppoe: %s\n", __func__ ) +#define DBG do { printf("ng_device: %s\n", __func__ ); } while (0) #else -#define DBG +#define DBG do {} while (0) #endif #include ==== //depot/projects/hammer/sys/vm/vm_zeroidle.c#16 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/vm/vm_zeroidle.c,v 1.30 2004/10/30 20:11:23 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/vm/vm_zeroidle.c,v 1.31 2004/10/31 19:32:57 alc Exp $"); #include @@ -76,6 +76,7 @@ #define ZIDLE_LO(v) ((v) * 2 / 3) #define ZIDLE_HI(v) ((v) * 4 / 5) +static boolean_t wakeup_needed = FALSE; static int zero_state; static int @@ -130,8 +131,11 @@ vm_page_zero_idle_wakeup(void) { - if (idlezero_enable && vm_page_zero_check()) + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + if (wakeup_needed && vm_page_zero_check()) { + wakeup_needed = FALSE; wakeup(&zero_state); + } } static void @@ -163,7 +167,10 @@ } #endif } else { - tsleep(&zero_state, pri, "pgzero", hz * 300); + vm_page_lock_queues(); + wakeup_needed = TRUE; + msleep(&zero_state, &vm_page_queue_mtx, PDROP | pri, + "pgzero", hz * 300); pages = 0; } }