|
@@ -475,12 +475,7 @@ static struct fsr_info {
|
|
|
{ do_bad, SIGBUS, BUS_ADRALN, "alignment exception" },
|
|
|
{ do_bad, SIGKILL, 0, "terminal exception" },
|
|
|
{ do_bad, SIGBUS, BUS_ADRALN, "alignment exception" },
|
|
|
-/* Do we need runtime check ? */
|
|
|
-#if __LINUX_ARM_ARCH__ < 6
|
|
|
{ do_bad, SIGBUS, 0, "external abort on linefetch" },
|
|
|
-#else
|
|
|
- { do_translation_fault, SIGSEGV, SEGV_MAPERR, "I-cache maintenance fault" },
|
|
|
-#endif
|
|
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" },
|
|
|
{ do_bad, SIGBUS, 0, "external abort on linefetch" },
|
|
|
{ do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" },
|
|
@@ -605,3 +600,14 @@ do_PrefetchAbort(unsigned long addr, unsigned int ifsr, struct pt_regs *regs)
|
|
|
arm_notify_die("", regs, &info, ifsr, 0);
|
|
|
}
|
|
|
|
|
|
+static int __init exceptions_init(void)
|
|
|
+{
|
|
|
+ if (cpu_architecture() >= CPU_ARCH_ARMv6) {
|
|
|
+ hook_fault_code(4, do_translation_fault, SIGSEGV, SEGV_MAPERR,
|
|
|
+ "I-cache maintenance fault");
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+arch_initcall(exceptions_init);
|