linux/arch
Benjamin Herrenschmidt ff3da2e093 [POWERPC] Fix iSeries hard irq enabling regression
A subtle bug sneaked into iSeries recently.  On this platform, we must
not normally clear MSR:EE (the hardware external interrupt enable)
except for short periods of time.  Taking an interrupt while
soft-disabled doesn't cause us to clear it for example.

The iSeries kernel expects to mostly run with MSR:EE enabled at all
times except in a few exception entry/exit code paths.  Thus
local_irq_enable() doesn't check if it needs to hard-enable as it
expects this to be unnecessary on iSeries.

However, hard_irq_disable() _does_ cause MSR:EE to be cleared,
including on iSeries.  A call to it was recently added to the
context switch code, thus causing interrupts to become disabled
for a long periods of time, causing the iSeries watchdog to kick
in under some circumstances and other nasty things.

This patch fixes it by making local_irq_enable() properly re-enable
MSR:EE on iSeries.  It basically removes a return statement here
to make iSeries use the same code path as everybody else.  That does
mean that we might occasionally get spurious decrementer interrupts
but I don't think that matters.

Another option would have been to make hard_irq_disable() a nop
on iSeries but I didn't like it much, in case we have good reasons
to hard-disable.

Part of the patch is fixes to make sure the hard_enabled PACA field
is properly set on iSeries as it used not to be before, since it
was mostly unused.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-04-03 22:10:34 +11:00
..
alpha alpha: use iommu_is_span_boundary helper function 2008-03-13 13:11:43 -07:00
arm Merge branch 'omap-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 into m 2008-03-20 15:59:51 +00:00
avr32 avr32: Fix bug in early resource allocation code 2008-03-27 15:31:57 +01:00
blackfin [Blackfin] arch: fix atomic and32/xor32 comments and ENDPROC markings 2008-03-03 17:44:14 -07:00
cris cris: correct usage of __user for copy to and from user space in lib/usercopy and uaccess.h 2008-03-04 16:35:16 -08:00
frv FRV: Change the timerfd syscalls to be the same as i386 2008-02-20 19:58:16 -08:00
h8300 h8300: defconfig update 2008-02-23 17:12:16 -08:00
ia64 [IA64] kprobes arch consolidation build fix 2008-03-06 09:49:01 -08:00
m32r ide: introduce HAVE_IDE 2008-02-09 10:46:40 +01:00
m68k m68k{,nommu}: Wire up new timerfd syscalls 2008-03-04 08:04:11 -08:00
m68knommu m68k{,nommu}: Wire up new timerfd syscalls 2008-03-04 08:04:11 -08:00
mips [MIPS] Clocksource: Only install r4k counter as clocksource if present. 2008-03-12 14:14:42 +00:00
mn10300 MN10300: define HZ as a config option 2008-02-23 17:12:13 -08:00
parisc [PARISC] head.S: section mismatch fixes 2008-03-15 19:12:22 -07:00
powerpc [POWERPC] Fix iSeries hard irq enabling regression 2008-04-03 22:10:34 +11:00
ppc [PPC] 8xx: swap bug-fix 2008-03-07 16:56:54 -06:00
s390 [S390] futex: let futex_atomic_cmpxchg_pt survive early functional tests. 2008-03-20 17:33:46 +01:00
sh sh: Use relative paths for mach/cpu symlinks. 2008-03-21 12:22:01 +09:00
sparc Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-03-17 23:44:31 -07:00
sparc64 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 2008-03-26 18:35:22 -07:00
um [UML]: uml-net: don't set IFF_ALLMULTI in set_multicast_list 2008-03-26 00:16:29 -07:00
v850 ide: introduce HAVE_IDE 2008-02-09 10:46:40 +01:00
x86 Avoid false positive warnings in kmap_atomic_prot() with DEBUG_HIGHMEM 2008-03-28 13:08:14 -07:00
xtensa [XTENSA] Allow debugger to modify the WINDOWBASE register. 2008-02-13 17:45:36 -08:00
.gitignore arch: Ignore arch/i386 and arch/x86_64 2008-01-19 21:29:39 -08:00
Kconfig Kprobes: indicate kretprobe support in Kconfig 2008-03-04 16:35:11 -08:00