aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2011-10-27 09:47:00 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2011-10-27 09:47:00 +0000
commit3e850a12ef30a817fce82c3800a75e677d84a369 (patch)
tree4466cadef677dc3c2c1ffdaafa74e86f9587d694 /sys/contrib
parenta0af7c3edba7a6a0421ed379afa50f88fe22057b (diff)
downloadsrc-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')
-rw-r--r--sys/contrib/pf/net/if_pfsync.c11
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++;