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:
parent
ad7907a326
commit
106d8916e6
@ -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);
|
||||
}
|
||||
/*
|
||||
|
@ -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);
|
||||
}
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user