summaryrefslogtreecommitdiff
path: root/arch/powerpc/mm/fault.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2012-01-31 18:13:14 +0400
committerTakashi Iwai <tiwai@suse.de>2012-01-31 18:13:14 +0400
commitea51e5040e24eefe44d70bc654a237ca1f0225b0 (patch)
treedf2e5922dcdfafae62a10d8cd97f98121064fc23 /arch/powerpc/mm/fault.c
parent3422a47041b8cb8f14ac1e3926bcf711121df6dc (diff)
parent8dbd52daee38adaae4d5a674bcca837e694a4f4c (diff)
downloadlinux-ea51e5040e24eefe44d70bc654a237ca1f0225b0.tar.xz
Merge branch 'fix/asoc' into for-linus
Diffstat (limited to 'arch/powerpc/mm/fault.c')
-rw-r--r--arch/powerpc/mm/fault.c17
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 @@
#include <asm/siginfo.h>
#include <mm/mmu_decl.h>
+#include "icswx.h"
+
#ifdef CONFIG_KPROBES
static inline int notify_page_fault(struct pt_regs *regs)
{
@@ -143,6 +145,21 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
is_write = error_code & ESR_DST;
#endif /* CONFIG_4xx || CONFIG_BOOKE */
+#ifdef CONFIG_PPC_ICSWX
+ /*
+ * we need to do this early because this "data storage
+ * interrupt" does not update the DAR/DEAR so we don't want to
+ * look at it
+ */
+ if (error_code & ICSWX_DSI_UCT) {
+ int ret;
+
+ ret = acop_handle_fault(regs, address, error_code);
+ if (ret)
+ return ret;
+ }
+#endif
+
if (notify_page_fault(regs))
return 0;