1
linux/arch/ia64
Russ Anderson 1612b18ccb [IA64] Support multiple CPUs going through OS_MCA
Linux does not gracefully deal with multiple processors going
through OS_MCA aa part of the same MCA event.  The first cpu
into OS_MCA grabs the ia64_mca_serialize lock.  Subsequent
cpus wait for that lock, preventing them from reporting in as
rendezvoused.  The first cpu waits 5 seconds then complains
that all the cpus have not rendezvoused.  The first cpu then
handles its MCA and frees up all the rendezvoused cpus and
releases the ia64_mca_serialize lock.  One of the subsequent
cpus going thought OS_MCA then gets the ia64_mca_serialize
lock, waits another 5 seconds and then complains that none of
the other cpus have rendezvoused.

This patch allows multiple CPUs to gracefully go through OS_MCA.

The first CPU into ia64_mca_handler() grabs a mca_count lock.
Subsequent CPUs into ia64_mca_handler() are added to a list of cpus
that need to go through OS_MCA (a bit set in mca_cpu), and report
in as rendezvoused, and but spin waiting their turn.

The first CPU sees everyone rendezvous, handles his MCA, wakes up
one of the other CPUs waiting to process their MCA (by clearing
one mca_cpu bit), and then waits for the other cpus to complete
their MCA handling.  The next CPU handles his MCA and the process
repeats until all the CPUs have handled their MCA.  When the last
CPU has handled it's MCA, it sets monarch_cpu to -1, releasing all
the CPUs.

In testing this works more reliably and faster.

Thanks to Keith Owens for suggesting numerous improvements
to this code.

Signed-off-by: Russ Anderson <rja@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
2007-07-11 11:50:11 -07:00
..
configs [IA64] refresh config files 2007-03-08 11:20:17 -08:00
dig [PATCH] tty: Remove include of screen_info.h from tty.h 2006-07-10 13:24:16 -07:00
hp [IA64] Fix - Section mismatch: reference to .init.data:mvec_name 2007-05-10 11:57:58 -07:00
ia32 [PATCH] add SIGNAL syscall class (v3) 2007-05-11 05:38:25 -04:00
kernel [IA64] Support multiple CPUs going through OS_MCA 2007-07-11 11:50:11 -07:00
lib [AF_RXRPC/AFS]: Arch-specific fixes. 2007-04-27 15:28:45 -07:00
mm [IA64] silence GCC ia64 unused variable warnings 2007-07-11 11:40:42 -07:00
oprofile Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
pci [IA64] prevent MCA when performing MMIO mmap to PCI config space 2007-07-11 11:34:49 -07:00
scripts Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sn [IA64] silence GCC ia64 unused variable warnings 2007-07-11 11:40:42 -07:00
defconfig Pull error-inject into release branch 2007-04-30 13:55:43 -07:00
install.sh Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
Kconfig [IA64] Quicklist support for IA64 2007-05-11 09:40:00 -07:00
Kconfig.debug [PATCH] Move Kprobes and Oprofile to "Instrumentation Support" menu 2005-11-07 07:53:35 -08:00
Makefile [IA64] add vmlinuz target 2006-06-21 14:31:07 -07:00
module.lds Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00