ARM: 6268/1: ARMv6K and ARMv7 use fault statuses 3 and 6 as Access Flag fault
[pandora-kernel.git] / arch / arm / mm / alignment.c
index 77cfdbe..d073b64 100644 (file)
@@ -926,8 +926,18 @@ static int __init alignment_init(void)
 
        hook_fault_code(1, do_alignment, SIGBUS, BUS_ADRALN,
                        "alignment exception");
-       hook_fault_code(3, do_alignment, SIGBUS, BUS_ADRALN,
-                       "alignment exception");
+
+       /*
+        * ARMv6K and ARMv7 use fault status 3 (0b00011) as Access Flag section
+        * fault, not as alignment error.
+        *
+        * TODO: handle ARMv6K properly. Runtime check for 'K' extension is
+        * needed.
+        */
+       if (cpu_architecture() <= CPU_ARCH_ARMv6) {
+               hook_fault_code(3, do_alignment, SIGBUS, BUS_ADRALN,
+                               "alignment exception");
+       }
 
        return 0;
 }