linux/arch/parisc/kernel
Grant Grundler 462b529f91 [PARISC] remove global_ack_eiem
Kudos to Thibaut Varene for spotting the (mis)use of appropriately named
global_ack_eiem. This took a long time to figure out and both insight
from myself, Kyle McMartin, and James Bottomley were required to narrow
down which bit of code could have this race condition.

The symptom was interrupts stopped getting delivered while some workload
was generating IO interrupts on two different CPUs. One of the interrupt
sources would get masked off and stay unmasked. Problem was global_ack_eiem
was accessed with read/modified/write sequence and not protected by
a spinlock.

PA-RISC doesn't need a global ack flag though. External Interrupts
are _always_ delivered to a single CPU (except for "global broadcast
interrupt" which AFAIK currently is not used.) So we don't have to worry
about any given IRQ vector getting delivered to more than one CPU.

Tested on a500 and rp34xx boxen. rsync to/from gsyprf11 (a500)
would lock up the box since NIC (tg3) interrupt and SCSI (sym2)
were on "opposite" CPUs (2 CPU system). Put them on the same CPU
or apply this patch and 10GB of data would rsync completely.

Please apply the following critical patch.

thanks,
grant

Signed-off-by: Grant Grundler <grundler@parisc-linux.org>
Acked-by: Thibaut VARENE <T-Bone@parisc-linux.org>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
2007-06-12 01:23:30 -04:00
..
asm-offsets.c rename thread_info to stack 2007-05-09 12:30:56 -07:00
binfmt_elf32.c [PATCH] elf: Always define elf_addr_t in linux/elf.h 2006-12-07 08:39:38 -08:00
cache.c Detach sched.h from mm.h 2007-05-21 09:18:19 -07:00
drivers.c [PARISC] display parisc device modalias in sysfs 2007-02-17 01:08:09 -05:00
entry.S [PARISC] fix "reduce size of task_struct on 64-bit machines" fallout 2007-05-30 02:27:46 -04:00
firmware.c [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
hardware.c [PARISC] fix section mismatches in arch/parisc/kernel 2007-05-27 13:36:27 -04:00
head.S [PARISC] more ENTRY(), ENDPROC(), END() conversions 2007-02-17 01:16:12 -05:00
hpmc.S [PARISC] Fix kernel panic in check_ivt 2007-06-04 02:26:52 -04:00
init_task.c [PATCH] nsproxy: move init_nsproxy into kernel/nsproxy.c 2006-10-02 07:57:20 -07:00
inventory.c [PARISC] use CONFIG_64BIT instead of __LP64__ 2007-02-17 01:16:40 -05:00
irq.c [PARISC] remove global_ack_eiem 2007-06-12 01:23:30 -04:00
Makefile [PATCH] sanitize building of fs/compat_ioctl.c 2006-01-10 08:01:33 -08:00
module.c [PARISC] use CONFIG_64BIT instead of __LP64__ 2007-02-17 01:16:40 -05:00
pa7300lc.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pacache.S [PARISC] add ASM_EXCEPTIONTABLE_ENTRY() macro 2007-02-17 01:16:26 -05:00
parisc_ksyms.c [PARISC] use CONFIG_64BIT instead of __LP64__ 2007-02-17 01:16:40 -05:00
pci-dma.c parisc: convert /proc/gsc/pcxl_dma to seq_file 2007-05-22 22:43:01 -04:00
pci.c [PARISC] avoid compiler warnings when compiling 64bit 2006-12-08 00:34:38 -05:00
pdc_chassis.c [PARISC] Work around machines which do not support chassis warnings 2006-06-27 23:28:37 +00:00
pdc_cons.c [PATCH] vt: Remove VT-specific declarations and definitions from tty.h 2006-07-10 13:24:16 -07:00
perf.c [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
perf_asm.S [PARISC] more ENTRY(), ENDPROC(), END() conversions 2007-02-17 01:16:12 -05:00
perf_images.h [PARISC] Use kzalloc and other janitor-style cleanups 2006-01-22 20:26:31 -05:00
process.c [PARISC] be more defensive in process.c::get_wchan 2007-05-30 02:36:00 -04:00
processor.c [PARISC] fix section mismatches in arch/parisc/kernel 2007-05-27 13:36:27 -04:00
ptrace.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
real2.S [PARISC] more ENTRY(), ENDPROC(), END() conversions 2007-02-17 01:16:12 -05:00
semaphore.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
setup.c [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
signal.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
signal32.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
signal32.h [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
smp.c [PARISC] fix section mismatch in smp.c 2007-05-30 02:10:12 -04:00
sys32.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sys_parisc.c header cleaning: don't include smp_lock.h when not used 2007-05-08 11:15:07 -07:00
sys_parisc32.c [PARISC] ROUND_UP macro cleanup in arch/parisc 2007-05-22 23:56:14 -04:00
syscall.S [PARISC] Fix bug when syscall nr is __NR_Linux_syscalls 2007-06-03 17:53:45 -04:00
syscall_table.S [PARISC] Wire up utimensat/signalfd/timerfd/eventfd syscalls 2007-05-27 15:19:58 -04:00
time.c [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
topology.c Replace remaining references to "driverfs" with "sysfs". 2007-02-17 19:13:42 +01:00
traps.c [PARISC] Fix kernel panic in check_ivt 2007-06-04 02:26:52 -04:00
unaligned.c [PARISC] add ASM_EXCEPTIONTABLE_ENTRY() macro 2007-02-17 01:16:26 -05:00
unwind.c [PARISC] fix null ptr deref in unwind.c 2007-05-30 02:24:28 -04:00
vmlinux.lds.S all-archs: consolidate .data section definition in asm-generic 2007-05-19 09:11:57 +02:00