Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Oct 2003 11:04:46 -0700 (PDT)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 39844 for review
Message-ID:  <200310171804.h9HI4koN023489@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=39844

Change 39844 by sam@sam_ebb on 2003/10/17 11:04:37

	permit multiple instances of the network stack to operate
	concurrently; this does not handle packet ordering issues
	yet (I think) but lets us look for synchronization problems

Affected files ...

.. //depot/projects/netperf/sys/net/netisr.c#5 edit

Differences ...

==== //depot/projects/netperf/sys/net/netisr.c#5 (text+ko) ====

@@ -60,7 +60,6 @@
 	struct ifqueue	*ni_queue;
 } netisrs[32];
 
-static struct mtx netisr_mtx;
 static void *net_ih;
 
 void
@@ -83,17 +82,13 @@
 netisr_unregister(int num)
 {
 	struct netisr *ni;
-	int s;
 	
 	KASSERT(!(num < 0 || num >= (sizeof(netisrs)/sizeof(*netisrs))),
 	    ("bad isr %d", num));
 	ni = &netisrs[num];
 	ni->ni_handler = NULL;
-	if (ni->ni_queue != NULL) {
-		s = splimp();
+	if (ni->ni_queue != NULL)
 		IF_DRAIN(ni->ni_queue);
-		splx(s);
-	}
 }
 
 struct isrstat {
@@ -143,15 +138,6 @@
 
 /*
  * Call the netisr directly instead of queueing the packet, if possible.
- *
- * Ideally, the permissibility of calling the routine would be determined
- * by checking if splnet() was asserted at the time the device interrupt
- * occurred; if so, this indicates that someone is in the network stack.
- *
- * However, bus_setup_intr uses INTR_TYPE_NET, which sets splnet before
- * calling the interrupt handler, so the previous mask is unavailable.
- * Approximate this by checking intr_nesting_level instead; if any SWI
- * handlers are running, the packet is queued instead.
  */
 void
 netisr_dispatch(int num, struct mbuf *m)
@@ -166,7 +152,7 @@
 		m_freem(m);
 		return;
 	}
-	if (netisr_enable && mtx_trylock(&netisr_mtx)) {
+	if (netisr_enable) {
 		isrstat.isrs_directed++;
 		/*
 		 * One slight problem here is that packets might bypass
@@ -182,7 +168,6 @@
 		 */
 		netisr_processqueue(ni);
 		ni->ni_handler(m);
-		mtx_unlock(&netisr_mtx);
 	} else {
 		isrstat.isrs_deferred++;
 		if (IF_HANDOFF(ni->ni_queue, m, NULL))
@@ -226,7 +211,6 @@
 	const int polling = 0;
 #endif
 
-	mtx_lock(&netisr_mtx);
 	do {
 		bits = atomic_readandclear_int(&netisr);
 		if (bits == 0)
@@ -246,14 +230,12 @@
 				netisr_processqueue(ni);
 		}
 	} while (polling);
-	mtx_unlock(&netisr_mtx);
 }
 
 static void
 start_netisr(void *dummy)
 {
 
-	mtx_init(&netisr_mtx, "netisr lock", NULL, MTX_DEF);
 	if (swi_add(NULL, "net", swi_net, NULL, SWI_NET, INTR_MPSAFE, &net_ih))
 		panic("start_netisr");
 }



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