linux/arch/ia64/kernel
Russ Anderson e1b1eb011e [IA64] Fix race when multiple cpus go through MCA
Additional testing uncovered a situation where the MCA recovery code could
hang due to a race condition.

According to the SAL spec, SAL sends a rendezvous interrupt to all but the first
CPU that goes into MCA.  This includes other CPUs that go into MCA at the same
time.  Those other CPUs will go into the linux MCA handler (rather than the
slave loop) with the rendezvous interrupt pending.  When all the CPUs have
completed MCA processing and the last monarch completes, freeing all the CPUs,
the CPUs with the pended rendezvous interrupt then go into the
ia64_mca_rendez_int_handler().  In ia64_mca_rendez_int_handler() the CPUs
get marked as rendezvoused, but then leave the handler (due to no MCA).
That leaves the CPUs marked as rendezvoused _before_ the next MCA event.

When the next MCA hits, the monarch will mistakenly believe that all the CPUs
are rendezvoused when they are not, opening up a window where a CPU can get
stuck in the slave loop.

This patch avoids leaving CPUs marked as rendezvoused when they are not.

Signed-off-by: Russ Anderson <rja@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
2007-10-12 15:19:02 -07:00
..
cpufreq [IA64] Fix processor_get_freq 2007-08-15 13:20:38 -07:00
acpi-ext.c Pull acpi_os_free into release branch 2006-07-01 17:19:08 -04:00
acpi-processor.c [IA64] Fix using uninitialized data in _PDC setup 2007-05-24 10:14:30 -07:00
acpi.c [IA64] Fix wrong assumption in acpi_gsi_to_irq 2007-07-26 14:27:42 -07:00
asm-offsets.c [IA64] Convert to generic timekeeping/clocksource 2007-07-20 11:22:30 -07:00
audit.c [PATCH] audit signal recipients 2007-05-11 05:38:25 -04:00
brl_emu.c
crash_dump.c [IA64] kexec: Minor enhancement to includes in crash.c 2007-02-05 11:31:04 -08:00
crash.c [IA64] kdump on INIT needs multi-nodes sync-up (v.2) 2007-05-14 15:55:39 -07:00
cyclone.c cyclone.c: silly use of volatile, __iomem fixes 2007-07-26 11:11:57 -07:00
efi_stub.S [IA64] make efi_stub.S fit in 80 cols 2006-06-21 14:35:28 -07:00
efi.c handle kernelcore=: generic 2007-07-17 10:22:59 -07:00
entry.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
entry.S [IA64] fallocate system call 2007-07-19 13:48:00 -07:00
err_inject.c [IA64] typo s/kenrel/kernel/ 2007-05-10 09:35:30 -07:00
esi_stub.S [IA64] esi-support 2006-06-21 11:19:22 -07:00
esi.c [IA64] esi-support 2006-06-21 11:19:22 -07:00
fsys.S [IA64] Convert to generic timekeeping/clocksource 2007-07-20 11:22:30 -07:00
fsyscall_gtod_data.h [IA64] Convert to generic timekeeping/clocksource 2007-07-20 11:22:30 -07:00
gate-data.S
gate.lds.S [PATCH] vDSO hash-style fix 2006-07-31 13:28:43 -07:00
gate.S [IA64] Stop bit for brl instruction 2007-07-09 13:37:44 -07:00
head.S [IA64] fix section mismatch warnings 2007-07-25 13:08:26 -07:00
ia64_ksyms.c [IA64] Need export for csum_ipv6_magic 2006-12-07 13:18:57 -08:00
init_task.c Remove fs.h from mm.h 2007-07-29 17:09:29 -07:00
iosapic.c [IA64] Fix wrong access to irq_desc[] in iosapic_register_intr(). 2007-08-01 11:57:59 -07:00
irq_ia64.c [IA64] Fix unexpected interrupt vector handling 2007-08-28 16:01:21 -07:00
irq_lsapic.c [IA64] spelling fixes: arch/ia64/ 2007-05-11 14:55:43 -07:00
irq.c [IA64] SN2 needs platform specific irq_to_vector() function. 2007-08-13 10:31:26 -07:00
ivt.S [IA64] relax per-cpu TLB requirement to DTC 2007-02-06 15:04:48 -08:00
jprobes.S [IA64] enable trap code on slot 1 2006-12-12 12:00:55 -08:00
kprobes.c jprobes: make jprobes a little safer for users 2007-07-19 10:04:44 -07:00
machine_kexec.c [IA64] Fix NULL-pointer dereference in ia64_machine_kexec() 2007-02-05 14:06:44 -08:00
machvec.c [IA64] Ensure that machvec is set up takes place before serial console 2007-07-25 11:12:47 -07:00
Makefile [IA64] Itanium MC Error Injection Tool: Makefile changes 2007-01-29 15:27:07 -08:00
mca_asm.S [IA64] Support multiple CPUs going through OS_MCA 2007-07-11 11:50:11 -07:00
mca_drv_asm.S [IA64] Don't set psr.ic and psr.i simultaneously 2007-07-09 10:30:28 -07:00
mca_drv.c [IA64] spelling fixes: arch/ia64/ 2007-05-11 14:55:43 -07:00
mca_drv.h [IA64] printing support for MCA/INIT 2006-09-26 14:44:37 -07:00
mca.c [IA64] Fix race when multiple cpus go through MCA 2007-10-12 15:19:02 -07:00
minstate.h Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
module.c [IA64] spelling fixes: arch/ia64/ 2007-05-11 14:55:43 -07:00
msi_ia64.c [IA64] Support irq migration across domain 2007-07-17 09:57:42 -07:00
numa.c [PATCH] cpumask: export node_to_cpu_mask consistently 2006-10-02 07:57:17 -07:00
pal.S [IA64] reformat pal.S to fit in 80 columns, fix typos 2006-10-17 14:54:19 -07:00
palinfo.c [IA64] tree-wide: Misc __cpu{initdata, init, exit} annotations 2007-10-12 14:13:38 -07:00
patch.c [IA64] remove per-cpu ia64_phys_stacked_size_p8 2007-02-06 15:04:18 -08:00
perfmon_default_smpl.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
perfmon_generic.h
perfmon_itanium.h
perfmon_mckinley.h [IA64] spelling fixes: arch/ia64/ 2007-05-11 14:55:43 -07:00
perfmon_montecito.h [IA64] sparse cleanups 2006-12-07 10:48:19 -08:00
perfmon.c [IA64] perfmon: Remove exit_pfm_fs() 2007-10-12 14:19:21 -07:00
process.c [IA64] disable irq's and check need_resched before safe_halt 2007-08-13 10:17:23 -07:00
ptrace.c Fix spurious syscall tracing after PTRACE_DETACH + PTRACE_ATTACH 2007-09-10 18:57:47 -07:00
relocate_kernel.S [IA64] Removal of percpu TR cleanup in kexec code 2007-05-08 10:00:28 -07:00
sal.c [IA64] spelling fixes: arch/ia64/ 2007-05-11 14:55:43 -07:00
salinfo.c [IA64] tree-wide: Misc __cpu{initdata, init, exit} annotations 2007-10-12 14:13:38 -07:00
semaphore.c
setup.c [IA64] Enable early console for Ski simulator 2007-09-01 02:50:39 -07:00
sigframe.h [IA64] Add TIF_RESTORE_SIGMASK 2007-05-08 14:51:59 -07:00
signal.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6 2007-05-09 13:38:45 -07:00
smp.c [IA64] Allow smp_call_function_single() to current cpu 2007-07-30 16:26:45 -07:00
smpboot.c [IA64] SN: Add support for CPU disable 2007-09-01 02:49:57 -07:00
sys_ia64.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
time.c [IA64] ITC: Reduce rating for ITC clock if ITCs are drifty 2007-08-01 14:02:36 -07:00
topology.c [IA64] tree-wide: Misc __cpu{initdata, init, exit} annotations 2007-10-12 14:13:38 -07:00
traps.c Report that kernel is tainted if there was an OOPS 2007-07-17 10:23:02 -07:00
unaligned.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
uncached.c [PATCH] Define easier to handle GFP_THISNODE 2006-09-26 08:48:50 -07:00
unwind_decoder.c
unwind_i.h
unwind.c [IA64] Correct unwind validation code 2007-06-26 13:33:10 -07:00
vmlinux.lds.S [IA64] get back PT_IA_64_UNWIND program header 2007-08-13 14:50:35 -07:00