diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2011-10-27 09:47:00 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2011-10-27 09:47:00 +0000 |
commit | 3e850a12ef30a817fce82c3800a75e677d84a369 (patch) | |
tree | 4466cadef677dc3c2c1ffdaafa74e86f9587d694 /sys/contrib/pf/net/if_pfsync.c | |
parent | a0af7c3edba7a6a0421ed379afa50f88fe22057b (diff) | |
download | src-3e850a12ef30a817fce82c3800a75e677d84a369.tar.gz src-3e850a12ef30a817fce82c3800a75e677d84a369.zip |
Utilize new IF_DEQUEUE_ALL(ifq, m) macro in pfsyncintr() to reduce
contention on ifqueue lock.
Notes
Notes:
svn path=/head/; revision=226831
Diffstat (limited to 'sys/contrib/pf/net/if_pfsync.c')
-rw-r--r-- | sys/contrib/pf/net/if_pfsync.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/contrib/pf/net/if_pfsync.c b/sys/contrib/pf/net/if_pfsync.c index 80714c264dc1..f60f70b6b473 100644 --- a/sys/contrib/pf/net/if_pfsync.c +++ b/sys/contrib/pf/net/if_pfsync.c @@ -3290,16 +3290,17 @@ void pfsyncintr(void *arg) { struct pfsync_softc *sc = arg; - struct mbuf *m; + struct mbuf *m, *n; CURVNET_SET(sc->sc_ifp->if_vnet); pfsync_ints++; - for (;;) { - IF_DEQUEUE(&sc->sc_ifp->if_snd, m); - if (m == 0) - break; + IF_DEQUEUE_ALL(&sc->sc_ifp->if_snd, m); + + for (; m != NULL; m = n) { + n = m->m_nextpkt; + m->m_nextpkt = NULL; if (ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL) == 0) V_pfsyncstats.pfsyncs_opackets++; |