summaryrefslogtreecommitdiffstats
path: root/arch/avr32/kernel/asm-offsets.c
diff options
context:
space:
mode:
authorHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2008-08-20 15:46:24 +0200
committerHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2008-09-01 13:04:04 +0200
commit9e3f544d792fd2ff7e31ca4a72e5194f1491ed14 (patch)
tree706d3f133b930e0085df63fcc171f4f49c9cd1db /arch/avr32/kernel/asm-offsets.c
parentbef69ea0dcce574a425feb0a5aa4c63dd108b9a6 (diff)
downloadlinux-9e3f544d792fd2ff7e31ca4a72e5194f1491ed14.tar.gz
linux-9e3f544d792fd2ff7e31ca4a72e5194f1491ed14.tar.xz
avr32: Fix lockup after Java stack underflow in user mode
When using the Java Extension Module hardware, a Java stack underflow or overflow trap may cause the system to enter an infinite exception loop. Although there's no kernel support for the Java hardware yet, we need to be able to recover from this situation and keep the system running. This patch adds code to detect and fixup this situation in the critical exception handler and terminate the faulting process. We may have to rethink how to handle this more gracefully when the necessary kernel support for hardware-accelerated Java is added. Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Diffstat (limited to 'arch/avr32/kernel/asm-offsets.c')
-rw-r--r--arch/avr32/kernel/asm-offsets.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/avr32/kernel/asm-offsets.c b/arch/avr32/kernel/asm-offsets.c
index e4796c67a831..d6a8193a1d2f 100644
--- a/arch/avr32/kernel/asm-offsets.c
+++ b/arch/avr32/kernel/asm-offsets.c
@@ -4,6 +4,8 @@
* to extract and format the required data.
*/
+#include <linux/mm.h>
+#include <linux/sched.h>
#include <linux/thread_info.h>
#include <linux/kbuild.h>
@@ -17,4 +19,8 @@ void foo(void)
OFFSET(TI_rar_saved, thread_info, rar_saved);
OFFSET(TI_rsr_saved, thread_info, rsr_saved);
OFFSET(TI_restart_block, thread_info, restart_block);
+ BLANK();
+ OFFSET(TSK_active_mm, task_struct, active_mm);
+ BLANK();
+ OFFSET(MM_pgd, mm_struct, pgd);
}