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