android_kernel_xiaomi_sm8350/arch
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
..
alpha alpha: fix alignment problem in csum_ipv6_magic() 2007-06-24 08:59:11 -07:00
arm [ARM] always allow dump_stack() to produce a backtrace 2007-07-05 19:59:51 +01:00
arm26 all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00
avr32 [AVR32] Update defconfigs 2007-06-23 15:43:48 +02:00
blackfin Blackfin arch: update board defconfig files 2007-07-02 13:49:15 +08:00
cris Fix trivial typos in Kconfig* files 2007-05-09 07:12:20 +02:00
frv all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00
h8300 h8300 trival patches 2007-06-01 08:18:29 -07:00
i386 Clean up E7520/7320/7525 quirk printk. 2007-07-07 13:53:13 -07:00
ia64 [IA64] Support multiple CPUs going through OS_MCA 2007-07-11 11:50:11 -07:00
m32r all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00
m68k x86_64: Quieten Atari keyboard warnings in Kconfig 2007-06-20 14:27:26 -07:00
m68knommu m68knommu: fix ColdFire timer off by 1 2007-06-08 17:23:32 -07:00
mips [MIPS] Fix scheduling latency issue on 24K, 34K and 74K cores 2007-07-06 16:17:11 +01:00
parisc [PARISC] unwinder improvements 2007-06-21 17:46:22 -04:00
powerpc [POWERPC] Update defconfigs 2007-07-02 00:04:36 -05:00
ppc potential parse error in ifdef part 3 2007-06-08 17:23:33 -07:00
s390 [S390] Add oops_enter()/oops_exit() calls to die(). 2007-06-19 13:10:20 +02:00
sh sh: Handle -ERESTART_RESTARTBLOCK for restartable syscalls. 2007-06-19 12:33:21 +09:00
sh64 sh64: Handle -ERESTART_RESTARTBLOCK for restartable syscalls. 2007-06-19 12:41:32 +09:00
sparc [SPARC32]: Build fix. 2007-05-31 01:52:51 -07:00
sparc64 [SPARC64]: Need to set state to IDLE during sun4v IRQ enable. 2007-06-26 00:13:31 -07:00
um uml: remove PAGE_SIZE from libc code 2007-06-16 13:16:16 -07:00
v850 all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00
x86_64 x86_64 irq: use mask/unmask and proper locking in fixup_irqs() 2007-06-26 16:54:29 -07:00
xtensa [XTENSA] Remove non-rt signal handling 2007-05-31 17:49:32 -07:00