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;