cvs commit: src/sys/sparc64/sparc64 mp_machdep.c

Marius Strobl marius at
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 
  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  +17 -5     src/sys/sparc64/sparc64/mp_machdep.c

More information about the cvs-src mailing list