Don't panic for delivery of a multiplexed SWI. Most SWI handlers

don't take an arg, but swi_generic() is special in order to avoid one
whole conditional branch in the old SWI dispatch code.  The new SWI
dispatch code passed it a garbage arg.  Bypass swi_generic() and call
swi_dispatcher() directly, like the corresponding alpha code has always
done.

The panic was rare because because it only occurred if more than one
of the {sio,cy,rc} drivers was configured and one was active, and the
cy driver doesn't even compile.
This commit is contained in:
bde 2000-09-12 16:02:43 +00:00
parent ad7907a326
commit 106d8916e6
2 changed files with 8 additions and 2 deletions

View File

@ -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);
}
/*

View File

@ -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);
}
/*