diff --git a/sys/amd64/isa/ithread.c b/sys/amd64/isa/ithread.c index 4ceac4229d1c..9bc66dc20838 100644 --- a/sys/amd64/isa/ithread.c +++ b/sys/amd64/isa/ithread.c @@ -327,7 +327,10 @@ intr_soft(void *dummy) atomic_add_long(intr_countp[i], 1); spending &= ~ (1 << i); mtx_enter(&Giant, MTX_DEF); - (ihandlers[i])(); + if (ihandlers[i] == swi_generic) + swi_dispatcher(i); + else + (ihandlers[i])(); mtx_exit(&Giant, MTX_DEF); } /* diff --git a/sys/i386/isa/ithread.c b/sys/i386/isa/ithread.c index 4ceac4229d1c..9bc66dc20838 100644 --- a/sys/i386/isa/ithread.c +++ b/sys/i386/isa/ithread.c @@ -327,7 +327,10 @@ intr_soft(void *dummy) atomic_add_long(intr_countp[i], 1); spending &= ~ (1 << i); mtx_enter(&Giant, MTX_DEF); - (ihandlers[i])(); + if (ihandlers[i] == swi_generic) + swi_dispatcher(i); + else + (ihandlers[i])(); mtx_exit(&Giant, MTX_DEF); } /*