Module Name:    src
Committed By:   matt
Date:           Mon Oct  8 20:54:10 UTC 2012

Modified Files:
        src/sys/arch/arm/broadcom: bcm53xx_eth.c

Log Message:
Initialize the workqueue to use IPL_NET for its mutex.
Prefer softints if the current lwp is the idle lwp.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/broadcom/bcm53xx_eth.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/broadcom/bcm53xx_eth.c
diff -u src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.8 src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.9
--- src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.8	Sun Oct  7 20:14:08 2012
+++ src/sys/arch/arm/broadcom/bcm53xx_eth.c	Mon Oct  8 20:54:10 2012
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.8 2012/10/07 20:14:08 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.9 2012/10/08 20:54:10 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -308,7 +308,7 @@ bcmeth_ccb_attach(device_t parent, devic
 	}
 
 	error = workqueue_create(&sc->sc_workq, xname, bcmeth_worker, sc,
-	    (PRI_USER + MAXPRI_USER) / 2, IPL_SOFTNET, WQ_MPSAFE|WQ_PERCPU);
+	    (PRI_USER + MAXPRI_USER) / 2, IPL_NET, WQ_MPSAFE|WQ_PERCPU);
 	if (error) {
 		aprint_error(": failed to create workqueue: %d\n", error);
 		return;
@@ -1563,7 +1563,8 @@ bcmeth_intr(void *arg)
 			 * so let the workqueue deal with them.
 			 */
 			const uint32_t framecount = __SHIFTOUT(sc->sc_rcvlazy, INTRCVLAZY_FRAMECOUNT);
-			if (descs < framecount) {
+			if (descs < framecount
+			    || (curcpu()->ci_curlwp->l_flag & LW_IDLE)) {
 				soft_flags |= SOFT_RXINTR;
 			} else {
 				work_flags |= WORK_RXINTR;

Reply via email to