Merge branch 'drm-fixes-3.13' of git://people.freedesktop.org/~agd5f/linux into drm...
[cascardo/linux.git] / arch / x86 / mm / fault.c
index 7a517bb..9ff85bb 100644 (file)
@@ -20,6 +20,9 @@
 #include <asm/kmemcheck.h>             /* kmemcheck_*(), ...           */
 #include <asm/fixmap.h>                        /* VSYSCALL_START               */
 
+#define CREATE_TRACE_POINTS
+#include <asm/trace/exceptions.h>
+
 /*
  * Page fault error code bits:
  *
@@ -596,7 +599,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
 
        printk(KERN_CONT " at %p\n", (void *) address);
        printk(KERN_ALERT "IP:");
-       printk_address(regs->ip, 1);
+       printk_address(regs->ip);
 
        dump_pagetable(address);
 }
@@ -1232,3 +1235,23 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code)
        __do_page_fault(regs, error_code);
        exception_exit(prev_state);
 }
+
+static void trace_page_fault_entries(struct pt_regs *regs,
+                                    unsigned long error_code)
+{
+       if (user_mode(regs))
+               trace_page_fault_user(read_cr2(), regs, error_code);
+       else
+               trace_page_fault_kernel(read_cr2(), regs, error_code);
+}
+
+dotraplinkage void __kprobes
+trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
+{
+       enum ctx_state prev_state;
+
+       prev_state = exception_enter();
+       trace_page_fault_entries(regs, error_code);
+       __do_page_fault(regs, error_code);
+       exception_exit(prev_state);
+}