[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Bug in decr_intr()
-----BEGIN PGP SIGNED MESSAGE-----
On Sep 8, 2009, at 5:50 PM, Michael wrote:
I think I just found out why we see occasional, weird panics on SMP
PowerPC machines with heavy IO and CPU load - have a look at
trap_subr.S - normal external interrupts save a bunch of registers,
increment cpuinfo->ci_intr_depth, INTRENTER, call ext_intr(),
continue at intr_exit: which restores registers, decrements
Now the decrementer interrupt does almost the same except that it /
doesn't/ increment ci_intr_depth but /does/ branch to intr_exit:, so
whenever we take a clock interrupt while working on a hardware
interrupt we get ci_intr_depth screwed up which may lead to all
kinds of weirdness like soft interrupts running when they shouldn't,
hop to the other CPU and whatnot.
Am I missing something here?
Yup, I am - why on earth do the interrupt handlers jump around like
that? I didn't see the part that increments ci_intr_depth and then
branches to decrintr:
Also, the pri field in clockframe / intrframe is apparently unused,
decr_intr() scribbles into it but the value is never used anywhere.
... and this can't cause the problems I'm getting - usually some
KASSERT that checks if a soft interrupt handler is still on the same
CPU it started out on.
sorry for the noise :/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
-----END PGP SIGNATURE-----
Main Index |
Thread Index |