linux/arch/parisc/kernel
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
..
.gitignore parisc: add arch/parisc/kernel/.gitignore 2008-10-10 16:32:28 +00:00
asm-offsets.c parisc: Use of align_frame provides stack frame. 2010-05-30 05:38:27 -04:00
binfmt_elf32.c parisc: fix redefinition of SET_PERSONALITY 2013-03-02 20:15:28 +01:00
cache.c parisc: remove the second argument of kmap_atomic 2013-05-06 22:19:00 +02:00
drivers.c parisc: Add export.h to files needing EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:00 -04:00
entry.S parisc: make interrupt and interruption stack allocation reentrant 2013-05-24 22:35:36 +02:00
firmware.c Disintegrate asm/system.h for PA-RISC 2012-03-28 18:30:02 +01:00
ftrace.c sched_clock: Add local_clock() API and improve documentation 2010-06-09 10:34:49 +02:00
hardware.c parisc: add rp5470 entry to machine database 2013-05-24 22:30:20 +02:00
head.S [PARISC] only make executable areas executable 2011-04-15 12:55:18 -05:00
hpmc.S parisc: fix partly 16/64k PAGE_SIZE boot 2013-05-06 23:08:32 +02:00
inventory.c parisc: fix possible memory leak in pat_query_module() 2013-02-20 22:47:11 +01:00
irq.c parisc: show number of FPE and unaligned access handler calls in /proc/interrupts 2013-05-24 22:35:26 +02:00
Makefile parisc: Fix init_task fallout 2012-05-07 11:38:46 +02:00
module.c modules: don't hand 0 to vmalloc. 2012-12-14 13:06:43 +10:30
pa7300lc.c
pacache.S parisc: use PAGE_SHIFT instead of hardcoded value 12 in pacache.S 2013-05-24 22:30:28 +02:00
parisc_ksyms.c parisc: Provide __ucmpdi2 to resolve undefined references in 32 bit builds. 2013-04-25 22:36:15 +02:00
pci-dma.c parisc: Add export.h to files needing EXPORT_SYMBOL/THIS_MODULE 2011-10-31 19:31:00 -04:00
pci.c parisc/PCI: factor out pcibios_setup() 2012-07-05 15:09:13 -06:00
pdc_chassis.c parisc: single_open() leaks 2013-05-05 00:10:41 -04:00
pdc_cons.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
perf_asm.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
perf_images.h
perf.c parisc: remove big kernel lock 2010-10-16 22:43:08 +02:00
process.c parisc: Use generic idle loop 2013-04-08 17:39:27 +02:00
processor.c parisc: processor.c, fix bloated stack frame 2009-07-03 03:34:11 +00:00
ptrace.c parisc: improve ptrace support for gdb single-step 2013-01-07 23:06:27 +01:00
real2.S parisc: move pdc_result to real2.S 2008-10-10 16:32:28 +00:00
setup.c parisc: fix partly 16/64k PAGE_SIZE boot 2013-05-06 23:08:32 +02:00
signal32.c parisc: fix error return codes for rt_sigaction and rt_sigprocmask 2013-02-20 22:57:02 +01:00
signal32.h parisc: switch to generic compat rt_sigaction() 2013-02-03 18:16:07 -05:00
signal.c parisc: remove unused variable 'compat_val' 2013-03-02 19:56:18 +01:00
smp.c parisc: tlb flush counting fix for SMP and UP 2013-05-07 23:44:04 +02:00
stacktrace.c parisc: add LATENCYTOP_SUPPORT and CONFIG_STACKTRACE_SUPPORT 2009-03-31 02:51:34 +00:00
sys32.h parisc: switch to generic compat rt_sigaction() 2013-02-03 18:16:07 -05:00
sys_parisc32.c unify compat fanotify_mark(2), switch to COMPAT_SYSCALL_DEFINE 2013-05-09 13:46:38 -04:00
sys_parisc.c mm: use vm_unmapped_area() on parisc architecture 2013-02-27 19:10:09 -08:00
syscall_table.S get rid of union semop in sys_semctl(2) arguments 2013-03-05 15:14:16 -05:00
syscall.S parisc: document the parisc gateway page 2013-05-06 23:09:10 +02:00
time.c parisc: move definition of PAGE0 to asm/page.h 2012-05-10 15:12:08 -07:00
topology.c parisc: Replace NR_CPUS in parisc code 2009-01-05 19:09:02 +00:00
traps.c parisc: show number of FPE and unaligned access handler calls in /proc/interrupts 2013-05-24 22:35:26 +02:00
unaligned.c parisc: show number of FPE and unaligned access handler calls in /proc/interrupts 2013-05-24 22:35:26 +02:00
unwind.c parisc: unwind - optimise linked-list searches for modules 2010-10-21 21:12:19 -04:00
vmlinux.lds.S parisc: add kernel stack overflow check 2013-05-07 21:34:07 +02:00