linux-stable-rt/arch
Siddha, Suresh B 48d8d7ee5d x86_64 irq: use mask/unmask and proper locking in fixup_irqs()
Force irq migration path during cpu offline, is not using proper locks and
irq_chip mask/unmask routines.  This will result in some races(especially
the device generating the interrupt can see some inconsistent state,
resulting in issues like stuck irq,..).

Appended patch fixes the issue by taking proper lock and encapsulating
irq_chip set_affinity() with a mask() before and an unmask() after.

This fixes a MSI irq stuck issue reported by Darrick Wong.

There are several more general bugs in this area(irq migration in the
process context). For example,

 1. Possibility of missing edge triggered irq.
 2. Reliable method of migrating level triggered irq in the process context.

We plan to look and close these in the near future.

Eric says:
	In addition even with the fix from Suresh there is still at least one
	nasty hardware race in fixup_irqs().   However we exercise that code
	path rarely enough that we are unlikely to hit it in the real world,
	and that race seems to have existed since the code was merged.  And a
	fix for that is not coming soon as it is an open investigation area
	if we can fix irq migration to work outside of irq context or if
	we have to rework the requirements imposed by the generic cpu hotplug
	and layer on fixup_irqs().  So this may come up again.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Reported-and-tested-by: Darrick Wong <djwong@us.ibm.com>
Cc: Andi Kleen <ak@suse.de>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-06-26 16:54:29 -07:00
..
alpha alpha: fix alignment problem in csum_ipv6_magic() 2007-06-24 08:59:11 -07:00
arm [ARM] 4449/1: more entries in arch/arm/boot/.gitignore 2007-06-25 20:37:35 +01:00
arm26
avr32 [AVR32] Update defconfigs 2007-06-23 15:43:48 +02:00
blackfin Blackfin arch: match kernel startup messaage with new linker script 2007-06-21 11:34:16 +08:00
cris
frv
h8300
i386 ACPI: preserve the ebx value in acpi_copy_wakeup_routine 2007-06-24 08:59:12 -07:00
ia64
m32r
m68k x86_64: Quieten Atari keyboard warnings in Kconfig 2007-06-20 14:27:26 -07:00
m68knommu
mips [MIPS] Count timer interrupts correctly. 2007-06-26 19:57:34 +02:00
parisc [PARISC] unwinder improvements 2007-06-21 17:46:22 -04:00
powerpc [POWERPC] Fix subtle FP state corruption bug in signal return on SMP 2007-06-26 14:49:11 +10:00
ppc
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
sparc64
um uml: remove PAGE_SIZE from libc code 2007-06-16 13:16:16 -07:00
v850
x86_64 x86_64 irq: use mask/unmask and proper locking in fixup_irqs() 2007-06-26 16:54:29 -07:00
xtensa