Merge tag 'linux-kselftest-kunit-5.15-rc1' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / arch / alpha / mm / fault.c
index c2303a8..eee5102 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/interrupt.h>
 #include <linux/extable.h>
 #include <linux/uaccess.h>
+#include <linux/perf_event.h>
 
 extern void die_if_kernel(char *,struct pt_regs *,long, unsigned long *);
 
@@ -116,6 +117,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,
 #endif
        if (user_mode(regs))
                flags |= FAULT_FLAG_USER;
+       perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
 retry:
        mmap_read_lock(mm);
        vma = find_vma(mm, address);
@@ -148,7 +150,7 @@ retry:
        /* If for any reason at all we couldn't handle the fault,
           make sure we exit gracefully rather than endlessly redo
           the fault.  */
-       fault = handle_mm_fault(vma, address, flags);
+       fault = handle_mm_fault(vma, address, flags, regs);
 
        if (fault_signal_pending(fault, regs))
                return;
@@ -164,10 +166,6 @@ retry:
        }
 
        if (flags & FAULT_FLAG_ALLOW_RETRY) {
-               if (fault & VM_FAULT_MAJOR)
-                       current->maj_flt++;
-               else
-                       current->min_flt++;
                if (fault & VM_FAULT_RETRY) {
                        flags |= FAULT_FLAG_TRIED;
 
@@ -221,13 +219,13 @@ retry:
        mmap_read_unlock(mm);
        /* Send a sigbus, regardless of whether we were in kernel
           or user mode.  */
-       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address, 0);
+       force_sig_fault(SIGBUS, BUS_ADRERR, (void __user *) address);
        if (!user_mode(regs))
                goto no_context;
        return;
 
  do_sigsegv:
-       force_sig_fault(SIGSEGV, si_code, (void __user *) address, 0);
+       force_sig_fault(SIGSEGV, si_code, (void __user *) address);
        return;
 
 #ifdef CONFIG_ALPHA_LARGE_VMALLOC