Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 31 Oct 2004 21:47:37 GMT
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 64027 for review
Message-ID:  <200410312147.i9VLlb4x068654@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 = &top;
-	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 = &top;
-	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 <sys/param.h>

==== //depot/projects/hammer/sys/netgraph/ng_pppoe.c#13 (text+ko) ====

@@ -36,13 +36,13 @@
  *
  * Author: Julian Elischer <julian@freebsd.org>
  *
- * $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 <sys/param.h>

==== //depot/projects/hammer/sys/vm/vm_zeroidle.c#16 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__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 <opt_sched.h>
 
@@ -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;
 		}
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200410312147.i9VLlb4x068654>