aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/fault.h
diff options
context:
space:
mode:
authorCatalin Marinas <catalin.marinas@arm.com>2011-11-22 12:30:31 -0500
committerCatalin Marinas <catalin.marinas@arm.com>2011-12-08 05:30:40 -0500
commitf7b8156d150f7383b42622a9219b230b36435b4a (patch)
treec06e0ed558f7a9e106920a9f3acbb6bed15017bf /arch/arm/mm/fault.h
parentc9f27f1026f55b543df260ad8ab84a7bdab7792f (diff)
ARM: LPAE: Add fault handling support
The DFSR and IFSR register format is different when LPAE is enabled. In addition, DFSR and IFSR have similar definitions for the fault type. This modifies the fault code to correctly handle the new format. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm/mm/fault.h')
-rw-r--r--arch/arm/mm/fault.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/mm/fault.h b/arch/arm/mm/fault.h
index 25b45c105be2..cf08bdfbe0d6 100644
--- a/arch/arm/mm/fault.h
+++ b/arch/arm/mm/fault.h
@@ -8,11 +8,19 @@
8#define FSR_WRITE (1 << 11) 8#define FSR_WRITE (1 << 11)
9#define FSR_FS4 (1 << 10) 9#define FSR_FS4 (1 << 10)
10#define FSR_FS3_0 (15) 10#define FSR_FS3_0 (15)
11#define FSR_FS5_0 (0x3f)
11 12
13#ifdef CONFIG_ARM_LPAE
14static inline int fsr_fs(unsigned int fsr)
15{
16 return fsr & FSR_FS5_0;
17}
18#else
12static inline int fsr_fs(unsigned int fsr) 19static inline int fsr_fs(unsigned int fsr)
13{ 20{
14 return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6; 21 return (fsr & FSR_FS3_0) | (fsr & FSR_FS4) >> 6;
15} 22}
23#endif
16 24
17void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs); 25void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs);
18unsigned long search_exception_table(unsigned long addr); 26unsigned long search_exception_table(unsigned long addr);