svn commit: r193212 - projects/pnet/sys/net
Robert Watson
rwatson at FreeBSD.org
Mon Jun 1 09:03:56 UTC 2009
Author: rwatson
Date: Mon Jun 1 09:03:55 2009
New Revision: 193212
URL: http://svn.freebsd.org/changeset/base/193212
Log:
Add missing VNET setup in the deferred dispatch case.
Lock around stats updates in forced direct dispatch mode.
Modified:
projects/pnet/sys/net/netisr.c
Modified: projects/pnet/sys/net/netisr.c
==============================================================================
--- projects/pnet/sys/net/netisr.c Mon Jun 1 08:50:56 2009 (r193211)
+++ projects/pnet/sys/net/netisr.c Mon Jun 1 09:03:55 2009 (r193212)
@@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$");
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
+#include <sys/vimage.h>
#ifdef DDB
#include <ddb/ddb.h>
@@ -697,7 +698,10 @@ netisr_process_workstream_proto(struct n
if (local_npw.nw_head == NULL)
local_npw.nw_tail = NULL;
local_npw.nw_len--;
+ VNET_ASSERT(m->m_pkthdr.rcvif != NULL);
+ CURVNET_SET(m->m_pkthdr.rcvif->if_vnet);
np[proto].np_handler(m);
+ CURVNET_RESTORE();
}
KASSERT(local_npw.nw_len == 0,
("%s(%u): len %u", __func__, proto, local_npw.nw_len));
@@ -882,13 +886,17 @@ netisr_dispatch_src(u_int proto, uintptr
/*
* If direct dispatch is forced, then unconditionally dispatch
* without a formal CPU selection. Borrow the current CPU's stats,
- * even if there's no worker on it.
+ * even if there's no worker on it. In this case we don't update
+ * nws_flags because all netisr processing will be source ordered due
+ * to always being forced to directly dispatch.
*/
if (netisr_direct_force) {
nwsp = &nws[curcpu];
npwp = &nwsp->nws_work[proto];
+ NWS_LOCK(nwsp);
npwp->nw_dispatched++;
npwp->nw_handled++;
+ NWS_UNLOCK(nwsp);
np[proto].np_handler(m);
error = 0;
goto out_unlock;
More information about the svn-src-projects
mailing list