csky: add page fault perf event support
authorMao Han <han_mao@c-sky.com>
Thu, 18 Apr 2019 06:20:40 +0000 (14:20 +0800)
committerGuo Ren <ren_guo@c-sky.com>
Mon, 22 Apr 2019 05:44:57 +0000 (13:44 +0800)
This patch add support for page fault count, major fault count
and minorfault count. Without this patch page faults are not
sampled for perf event.

Performance counter stats for '/usr/lib/perf-test/callchain_test':
0      page-faults               #    0.000 K/sec

Signed-off-by: Mao Han <han_mao@c-sky.com>
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
arch/csky/mm/fault.c

index 5beb25ca1c79804e4bd14402fa1b44a70feff476..aeb9a5f11e00a31238ce2d71c95d300dcb72481b 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/vt_kern.h>
 #include <linux/extable.h>
 #include <linux/uaccess.h>
+#include <linux/perf_event.h>
 
 #include <asm/hardirq.h>
 #include <asm/mmu_context.h>
@@ -106,6 +107,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
                return;
        }
 #endif
+
+       perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
        /*
         * If we're in an interrupt or have no user
         * context, we must not take the fault..
@@ -153,10 +156,15 @@ good_area:
                        goto bad_area;
                BUG();
        }
-       if (fault & VM_FAULT_MAJOR)
+       if (fault & VM_FAULT_MAJOR) {
                tsk->maj_flt++;
-       else
+               perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs,
+                             address);
+       } else {
                tsk->min_flt++;
+               perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs,
+                             address);
+       }
 
        up_read(&mm->mmap_sem);
        return;