The bnx(4) handler runs at IPL_NET (works with spin mutexes), while
allocations can be deferred to a workqueue(9): set its highest IPL to IPL_NET and not IPL_NONE, which is protected by an adaptive/sleeping mutex.
This commit is contained in:
parent
162d7d5b76
commit
3d92bf7df0
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: if_bnx.c,v 1.44 2011/07/15 11:29:31 jym Exp $ */
|
||||
/* $NetBSD: if_bnx.c,v 1.45 2011/09/22 08:42:53 jym Exp $ */
|
||||
/* $OpenBSD: if_bnx.c,v 1.85 2009/11/09 14:32:41 dlg Exp $ */
|
||||
|
||||
/*-
|
||||
|
@ -35,7 +35,7 @@
|
|||
#if 0
|
||||
__FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $");
|
||||
#endif
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.44 2011/07/15 11:29:31 jym Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.45 2011/09/22 08:42:53 jym Exp $");
|
||||
|
||||
/*
|
||||
* The following controllers are supported by this driver:
|
||||
|
@ -707,7 +707,7 @@ bnx_attach(device_t parent, device_t self, void *aux)
|
|||
|
||||
/* create workqueue to handle packet allocations */
|
||||
if (workqueue_create(&sc->bnx_wq, device_xname(self),
|
||||
bnx_alloc_pkts, sc, PRI_NONE, IPL_NONE, WQ_MPSAFE) != 0) {
|
||||
bnx_alloc_pkts, sc, PRI_NONE, IPL_NET, WQ_MPSAFE) != 0) {
|
||||
aprint_error_dev(self, "failed to create workqueue\n");
|
||||
goto bnx_attach_fail;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue