linux/arch/avr32/kernel
Philippe Rétornaz a7e30b8d91 [AVR32] Fix random segfault with preemption
As explained on:
http://www.avrfreaks.net/index.php?nameÿphpBB2&fileÿewtopic&tS307
If the current process is preempted before it can copy RAR_SUP and
RSR_SUP both register are lost and the process will segfault as soon
as it return from the syscall since the return adress will be
corrupted.

This patch disable IRQ as soon as we enter the syscall path and
reenable them when the copy is done.

In the interrupt handlers, check if we are interrupting the srrf
instruction, if so disable interrupts and return. The interrupt
handler will be re-called immediatly when the interrupts are
reenabled.

After some stressing workload:
 - find / > /dev/null in loop
 - top (in ssh)
 - ping -f avr32

The segfaults are not seen anymore.

Signed-off-by: Philippe Rétornaz <philippe.retornaz@epfl.ch>
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
2007-10-11 13:32:56 +02:00
..
Makefile [AVR32] rename vmlinux.lds 2007-10-11 12:16:56 +02:00
asm-offsets.c [PATCH] avr32 architecture 2006-09-26 08:48:54 -07:00
avr32_ksyms.c [AVR32] Export clear_page symbol 2007-01-26 13:12:25 +01:00
cpu.c [AVR32] Clean up cpu identification and add features bitmap 2007-04-27 13:44:13 +02:00
entry-avr32b.S [AVR32] Fix random segfault with preemption 2007-10-11 13:32:56 +02:00
head.S AVR32: Get rid of board_early_init 2006-11-06 10:43:23 +01:00
init_task.c [PATCH] avr32 architecture 2006-09-26 08:48:54 -07:00
irq.c [AVR32] Remove bogus comment in arch/avr32/kernel/irq.c 2007-05-13 16:05:59 +02:00
kprobes.c [AVR32] optimize pagefault path 2007-05-13 17:07:46 +02:00
module.c [AVR32] Clean up exception handling code 2007-04-27 13:44:13 +02:00
process.c wrap access to thread_info 2007-05-09 12:30:56 -07:00
ptrace.c PTRACE_POKEDATA consolidation 2007-07-17 10:23:03 -07:00
semaphore.c [PATCH] avr32 architecture 2006-09-26 08:48:54 -07:00
setup.c [AVR32] fix command line parsing in early_parse_fbmem 2007-10-11 12:16:56 +02:00
signal.c [PATCH] Add include/linux/freezer.h and move definitions from sched.h 2006-12-07 08:39:27 -08:00
switch_to.S [PATCH] avr32 architecture 2006-09-26 08:48:54 -07:00
sys_avr32.c [PATCH] AVR32: Implement kernel_execve 2006-10-02 07:57:24 -07:00
syscall-stubs.S AVR32: Wire up sys_epoll_pwait 2006-11-06 14:07:15 +01:00
syscall_table.S [AVR32] Wire up signalfd, timerfd and eventfd 2007-05-13 17:07:57 +02:00
time.c [AVR32] Change system timer from count-compare to Timer/Counter 0 2007-04-27 13:44:12 +02:00
traps.c Report that kernel is tainted if there was an OOPS 2007-07-17 10:23:02 -07:00
vmlinux.lds.S [AVR32] Remove unneeded 8K alignment of .text section 2007-10-11 12:16:57 +02:00