Port-macppc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Bug in decr_intr()
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
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
ci_intr_depth, returns.
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 :/
Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
iQEVAwUBSqc+mspnzkX8Yg2nAQJiAggAnVTnnFJpUU0Y/h9VW9vpJg+j8RlKUQdf
T35Lm2Vcthzy4IqhKOVjab8Decxc2JQUXNNTWF5RsnFqywbUMa+RyvUdmkRhx5Yz
kOJ8hg3mFivcH+s0bQvW6PylTcpToYHE3Tsqq2E8yF1bb/nDiRCZGaOt0tQOAgq5
k7wzrW4OL/r+mVw6DTnI/5IJAdhxq0fSUoZOlQqvuFRdvCeuMw5Jt75jkrzulrkM
sqUk0kVoP+uRH3w8b4Q9mKrpvEH6NYNkwjEEXNe3hP3unQPCsojHazZQzhDvzL3a
SOS72TM0vW4X2ZAbs1Qj8Wf56bNxHOqK8lqn4OsatKgYpCjhvb8wAg==
=B2iS
-----END PGP SIGNATURE-----
Home |
Main Index |
Thread Index |
Old Index