ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7
authorKirill A. Shutemov <kirill@shutemov.name>
Fri, 25 Sep 2009 12:40:49 +0000 (13:40 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 2 Oct 2009 21:34:32 +0000 (22:34 +0100)
commitd25ef8b86e6a58f5476bf6e4a8da730b335f68fa
tree2d7773ed145ace0f93d7a11ee9f738a4df4be14f
parent4fb2847437d871fe579f820ceb18031db3359901
ARM: 5728/1: Proper prefetch abort handling on ARMv6 and ARMv7

Currently, on ARMv6 and ARMv7, if an application tries to execute
code (or garbage) on non-executable page it hangs. It caused by
incorrect prefetch abort handling. Now every prefetch abort
processes as a translation fault.

To fix this we have to analyze instruction fault status register
to figure out reason why we've got the abort and process it
accordingly.

To make IFSR different from DFSR we set bit 31 which is reserved in
both IFSR and DFSR.

This patch also tries to protect from future hangs on unexpected
exceptions. An application will be killed if unexpected exception
type was received.

Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/fault.c