ARM: 6268/1: ARMv6K and ARMv7 use fault statuses 3 and 6 as Access Flag fault
Statuses 3 (0b00011) and 6 (0x00110) of DFSR are Access Flags faults on ARMv6K and ARMv7. Let's patch fsr_info[] at runtime if we are on ARMv7 or later. Unfortunately, we don't have runtime check for 'K' extension, so we can't check for it. Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
993bf4ec8c
commit
b8ab5397bc
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -607,6 +607,17 @@ static int __init exceptions_init(void)
|
|||
"I-cache maintenance fault");
|
||||
}
|
||||
|
||||
if (cpu_architecture() >= CPU_ARCH_ARMv7) {
|
||||
/*
|
||||
* TODO: Access flag faults introduced in ARMv6K.
|
||||
* Runtime check for 'K' extension is needed
|
||||
*/
|
||||
hook_fault_code(3, do_bad, SIGSEGV, SEGV_MAPERR,
|
||||
"section access flag fault");
|
||||
hook_fault_code(6, do_bad, SIGSEGV, SEGV_MAPERR,
|
||||
"section access flag fault");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue