Port-powerpc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Bug in decr_intr()
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hello,
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.
Also, the pri field in clockframe / intrframe is apparently unused,
decr_intr() scribbles into it but the value is never used anywhere.
Finally, decr_intr() uses splclock() / splx() which, combined with the
above, may lead to (soft) interrupt handlers being called when they
shouldn't.
Am I missing something here?
have fun
Michael
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (Darwin)
iQEVAwUBSqbRjspnzkX8Yg2nAQLLSggAkQhmA7iPMTxgvZXeu491xPIskpvIPyU9
8KcrcuNLYymOo1sNvsCFQdP4Wpu41LXKSo4CDj+mSNRD2HCdZgeqpIIhdqWrm7HB
RxXcWZO/tqmGUHOrVj4VzX4XIsXQut6vHx3HzUGMq96TAucGyeUPU3bhl94ZfqmB
xBD4fj9aCNDGCutiNOfkaDNLsDHlf+I0Ab67gKG1C6HurSr2Vt6jtADdCV5utQtd
7JOmlkzZV3j2yhh6UvRHKxmMG5cS0qgSc4FCSwwnivNcoqYnXHZM4Bt/F7OBJFm+
0UY31vCbxLBGWQwM8YO8mkb5Oyj9IrwnVzIBQZz2uJWFEWgjJWoVZA==
=WIik
-----END PGP SIGNATURE-----
Home |
Main Index |
Thread Index |
Old Index