PERFORCE change 64027 for review
Peter Wemm
peter at FreeBSD.org
Sun Oct 31 13:47:39 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=64027
Change 64027 by peter at 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 <sys/param.h>
==== //depot/projects/hammer/sys/netgraph/ng_pppoe.c#13 (text+ko) ====
@@ -36,13 +36,13 @@
*
* Author: Julian Elischer <julian at 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;
}
}
More information about the p4-projects
mailing list