freebsd-skq/sys/sparc64
Marius Strobl 9ed61314ff - 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 in the
  kernel pages) array which establishes a FreeBSD CPU ID -> module ID
  relation and use that in cpu_ipi_selected() (instead of statically
  allocating the per-CPU pages which would just waste memory on say a dual
  CPU machine as sun4u theoretically supports up to 128 CPUs or wasting
  dTLB slots for the foreign per-CPU pages). [1]
- 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. [2]

Reported by:		kris [1]
Some clue from:		kmacy [1]
Info from:		Linux, OpenSolaris [2]
Additional testing by:	kris
MFC after:		3 days
2006-03-29 00:14:08 +00:00
..
central - Register the generic implementations for the device shutdown, suspend 2006-01-26 21:14:32 +00:00
compile
conf Hook up le(4) to the build. For now it's only added to the sparc64 GENERIC 2006-01-31 22:34:13 +00:00
creator - Declare lookup tables etc. const. 2005-07-10 11:16:34 +00:00
ebus - Register the generic implementations for the device shutdown, suspend 2006-01-26 21:14:32 +00:00
fhc Add convenience macros for the full register set and use them to replace 2006-03-28 19:46:48 +00:00
include Add convenience macros for the bits in ASI_ESTATE_ERROR_EN_REG (used 2006-03-29 00:08:48 +00:00
isa - Move the declaration of struct upa_ranges and the UPA_RANGE_* macros 2005-12-03 19:52:20 +00:00
pci - Register the generic implementations for the device shutdown, suspend 2006-01-26 21:14:32 +00:00
sbus o lsi64854_enet_intr(): 2006-01-31 12:50:02 +00:00
sparc64 - We only lock the local per-CPU page in the local dTLB, so accessing the 2006-03-29 00:14:08 +00:00