summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2005-09-15 20:08:21 +0000
committerjhb <jhb@FreeBSD.org>2005-09-15 20:08:21 +0000
commitfeeb07e6ae425b0f5c31972b670412b5917281ec (patch)
tree713cc0c0e6ae1f62348c3bcbd092e6f9d131c61d /sys
parent13424e4bb87c87ba0a8e7c9da9c50505cb1238f1 (diff)
downloadFreeBSD-src-feeb07e6ae425b0f5c31972b670412b5917281ec.zip
FreeBSD-src-feeb07e6ae425b0f5c31972b670412b5917281ec.tar.gz
Don't disallow sleeping for handlers on swi's since some swi handlers
(like CAM) do sleep in their handlers. Requested by: scottl
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_intr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index d3c876d..ab189cf 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -521,7 +521,8 @@ ithread_loop(void *arg)
* another pass.
*/
atomic_store_rel_int(&ithd->it_need, 0);
- THREAD_NO_SLEEPING();
+ if (!(ithd->it_flags & IT_SOFT))
+ THREAD_NO_SLEEPING();
restart:
TAILQ_FOREACH(ih, &ithd->it_handlers, ih_next) {
if (ithd->it_flags & IT_SOFT && !ih->ih_need)
@@ -547,7 +548,8 @@ restart:
if ((ih->ih_flags & IH_MPSAFE) == 0)
mtx_unlock(&Giant);
}
- THREAD_SLEEPING_OK();
+ if (!(ithd->it_flags & IT_SOFT))
+ THREAD_SLEEPING_OK();
/*
* Interrupt storm handling:
OpenPOWER on IntegriCloud