diff options
Diffstat (limited to 'arch/powerpc/mm/fault.c')
-rw-r--r-- | arch/powerpc/mm/fault.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 5efe8c96d37f..2f0d1b032a89 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -44,6 +44,8 @@ | |||
44 | #include <asm/siginfo.h> | 44 | #include <asm/siginfo.h> |
45 | #include <mm/mmu_decl.h> | 45 | #include <mm/mmu_decl.h> |
46 | 46 | ||
47 | #include "icswx.h" | ||
48 | |||
47 | #ifdef CONFIG_KPROBES | 49 | #ifdef CONFIG_KPROBES |
48 | static inline int notify_page_fault(struct pt_regs *regs) | 50 | static inline int notify_page_fault(struct pt_regs *regs) |
49 | { | 51 | { |
@@ -143,6 +145,21 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address, | |||
143 | is_write = error_code & ESR_DST; | 145 | is_write = error_code & ESR_DST; |
144 | #endif /* CONFIG_4xx || CONFIG_BOOKE */ | 146 | #endif /* CONFIG_4xx || CONFIG_BOOKE */ |
145 | 147 | ||
148 | #ifdef CONFIG_PPC_ICSWX | ||
149 | /* | ||
150 | * we need to do this early because this "data storage | ||
151 | * interrupt" does not update the DAR/DEAR so we don't want to | ||
152 | * look at it | ||
153 | */ | ||
154 | if (error_code & ICSWX_DSI_UCT) { | ||
155 | int ret; | ||
156 | |||
157 | ret = acop_handle_fault(regs, address, error_code); | ||
158 | if (ret) | ||
159 | return ret; | ||
160 | } | ||
161 | #endif | ||
162 | |||
146 | if (notify_page_fault(regs)) | 163 | if (notify_page_fault(regs)) |
147 | return 0; | 164 | return 0; |
148 | 165 | ||