cvs commit: src/sys/sparc64/sparc64 mp_machdep.c
Marius Strobl
marius at FreeBSD.org
Fri Mar 31 23:48:12 UTC 2006
marius 2006-03-31 23:48:12 UTC
FreeBSD src repository
Modified files: (Branch: RELENG_6)
sys/sparc64/sparc64 mp_machdep.c
Log:
MFC: 1.32
- We only lock the local per-CPU page in the local dTLB, so accessing the
foreign per-CPU pages in cpu_ipi_send() in order to get the module IDs
of the other CPUs can cause a page fault. If this happens when doing a
TLB shootdown while dealing with another page fault this causes a panic
due to the recursive page fault. As I don't spot other code that assumes
or requires that accessing foreign per-CPU pages must not page fault
solve this by adding a statically allocated (and therefore locked as
part of the kernel pages) array which establishes a FreeBSD CPU ID ->
module ID relation and use that in cpu_ipi_selected().
- Fix a potential race in cpu_ipi_send(); as we don't serialize the access
to cpu_ipi_selected() between MI and MD use (only MI-MI and MD-MD) we
might catch the NACK bit caused by sending another IPI. Solve this by
checking the NACK bit in the contents of the interrupt dispatch status
reg read while interrupts were still turned off instead of reading that
reg anew after interrupts were turned on again. This is also what the
CPU docs suggest to do.
- Add a workaround for the SpitFire erratum #54 bug (affecting interrupt
dispatch). While public info regarding what this CPU bug actually causes
is not available testing shows that with the workaround in place it's
less likely to get a "couldn't send ipi" panic, it doesn't solve these
panics entirely though.
Approved by: re (mux)
Revision Changes Path
1.29.2.1 +17 -5 src/sys/sparc64/sparc64/mp_machdep.c
More information about the cvs-src
mailing list