linux/arch/parisc/include/asm
John David Anglin b63a2bbc0b parisc: make interrupt and interruption stack allocation reentrant
The get_stack_use_cr30 and get_stack_use_r30 macros allocate a stack
frame for external interrupts and interruptions requiring a stack frame.
They are currently not reentrant in that they save register context
before the stack is set or adjusted.

I have observed a number of system crashes where there was clear
evidence of stack corruption during interrupt processing, and as a
result register corruption. Some interruptions can still occur during
interruption processing, however external interrupts are disabled and
data TLB misses don't occur for absolute accesses. So, it's not entirely
clear what triggers this issue. Also, if an interruption occurs when
Q=0, it is generally not possible to recover as the shadowed registers
are not copied.

The attached patch reworks the get_stack_use_cr30 and get_stack_use_r30
macros to allocate stack before doing register saves. The new code is a
couple of instructions shorter than the old implementation. Thus, it's
an improvement even if it doesn't fully resolve the stack corruption
issue. Based on limited testing, it improves SMP system stability.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Signed-off-by: Helge Deller <deller@gmx.de>
2013-05-24 22:35:36 +02:00
..
agp.h agp: kill phys_to_gart() and gart_to_phys() 2009-08-03 09:05:00 +01:00
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
asmregs.h
assembly.h parisc: make interrupt and interruption stack allocation reentrant 2013-05-24 22:35:36 +02:00
atomic.h parisc: implement atomic64_dec_if_positive() 2013-05-06 23:10:04 +02:00
barrier.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
bitops.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
bug.h [PARISC] fix missing TAINT_WARN problem 2012-06-05 14:10:17 +09:00
bugs.h
cache.h parisc: remove homegrown L1_CACHE_ALIGN macro 2010-10-21 21:20:09 -04:00
cacheflush.h parisc: Change kunmap macro to static inline function 2013-04-25 22:36:31 +02:00
checksum.h parisc: fix ipv6 checksum 2009-01-05 19:11:05 +00:00
cmpxchg.h parisc: fix missing cmpxchg file error from system.h split 2012-04-02 14:41:26 -07:00
compat_ucontext.h
compat.h parisc: convert msgrcv and msgsnd syscalls to use compat layer 2013-02-20 22:56:50 +01:00
current.h
delay.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
dma-mapping.h parisc: Provide default implementation for dma_{alloc, free}_attrs 2013-05-06 22:29:09 +02:00
dma.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
eisa_bus.h
eisa_eeprom.h Fix common misspellings 2011-03-31 11:26:23 -03:00
elf.h parisc: fix personality on 32bit kernel 2013-02-20 22:55:26 +01:00
fb.h
fixmap.h parisc: rename parisc's vmalloc_start to parisc_vmalloc_start 2009-09-27 23:27:04 -04:00
floppy.h parisc: remove IRQF_DISABLED 2013-02-20 22:50:26 +01:00
ftrace.h parisc: add CALLER_ADDR{0-6} macros 2009-12-16 03:48:54 +00:00
futex.h [PARISC] futex: Use same lock set as lws calls 2012-02-27 09:35:08 -06:00
grfioctl.h
hardirq.h parisc: show number of FPE and unaligned access handler calls in /proc/interrupts 2013-05-24 22:35:26 +02:00
hardware.h parisc: drop include of asm/pdc.h from asm/hardware.h 2012-05-10 15:12:08 -07:00
ide.h
io.h parisc: define x->x mmio accessors 2009-03-13 01:20:48 -04:00
irq.h [PARISC] Convert to new irq_chip functions 2011-02-10 10:22:14 -06:00
irqflags.h Fix IRQ flag handling naming 2010-10-07 14:08:55 +01:00
kbdleds.h keyboard: Use BIOS Keyboard variable to set Numlock 2012-05-08 14:19:41 -07:00
Kbuild tracing,x86: Add a TSC trace_clock 2012-11-13 15:48:27 -05:00
kmap_types.h kmap_types: make most arches use generic header file 2009-06-16 19:47:51 -07:00
ldcw.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
led.h
linkage.h
machdep.h
mc146818rtc.h
mckinley.h
mmu_context.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
mmu.h
mmzone.h arch/parisc/include/asm: use ARRAY_SIZE macro in mmzone.h 2013-02-20 22:57:49 +01:00
module.h Make most arch asm/module.h files use asm-generic/module.h 2012-09-28 14:31:03 +09:30
page.h parisc: fixes and cleanups in page cache flushing (1/4) 2013-02-20 22:49:19 +01:00
parisc-device.h parisc: struct device - replace bus_id with dev_name(), dev_set_name() 2008-11-26 22:22:41 +00:00
parport.h ARCH: drivers remove __dev* attributes. 2013-01-03 15:57:13 -08:00
pci.h PCI: collapse pcibios_resource_to_bus 2012-02-23 20:19:04 -07:00
pdc_chassis.h
pdc.h UAPI: (Scripted) Disintegrate arch/parisc/include/asm 2012-10-16 21:28:05 +01:00
pdcpat.h
perf_event.h irq_work: Add generic hardirq context callbacks 2010-10-18 19:58:50 +02:00
perf.h
pgalloc.h
pgtable.h parisc: use spin_lock_irqsave/spin_unlock_irqrestore for PTE updates 2013-04-25 22:37:00 +02:00
prefetch.h [PARISC] fix panic on prefetch(NULL) on PA7300LC 2012-05-16 13:15:21 +01:00
processor.h parisc: implement irq stacks - part 2 (v2) 2013-05-11 21:10:15 +02:00
psw.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
ptrace.h UAPI: (Scripted) Disintegrate arch/parisc/include/asm 2012-10-16 21:28:05 +01:00
ropes.h
rt_sigframe.h
rtc.h
runway.h
scatterlist.h remove needless ISA_DMA_THRESHOLD 2010-08-07 18:15:50 +02:00
sections.h
serial.h
shmparam.h
signal.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-02-23 18:50:11 -08:00
smp.h [PARISC] Fix parisc compile failure after smp: Add task_struct argument to __cpu_up() 2012-05-25 12:35:45 +01:00
special_insns.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spinlock.h parisc: add missing includes in asm/spinlock.h 2012-05-10 15:12:08 -07:00
string.h
superio.h
switch_to.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
syscall.h parisc: add skeleton syscall.h 2009-09-27 23:07:23 -04:00
termios.h UAPI: (Scripted) Disintegrate arch/parisc/include/asm 2012-10-16 21:28:05 +01:00
thread_info.h parisc: add kernel stack overflow check 2013-05-07 21:34:07 +02:00
timex.h Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
tlb.h mm: Pass virtual address to [__]p{te,ud,md}_free_tlb() 2009-07-27 12:10:38 -07:00
tlbflush.h parisc: tlb flush counting fix for SMP and UP 2013-05-07 23:44:04 +02:00
traps.h
uaccess.h parisc: uaccess: fix compiler warnings caused by __put_user casting 2013-04-25 22:36:42 +02:00
ucontext.h
unaligned.h
unistd.h consolidate cond_syscall and SYSCALL_ALIAS declarations 2013-03-03 22:55:19 -05:00
unwind.h