|
@@ -18,6 +18,7 @@
|
|
|
#include <linux/page-flags.h>
|
|
|
#include <linux/sched.h>
|
|
|
#include <linux/highmem.h>
|
|
|
+#include <linux/perf_event.h>
|
|
|
|
|
|
#include <asm/system.h>
|
|
|
#include <asm/pgtable.h>
|
|
@@ -302,6 +303,12 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
|
|
fault = __do_page_fault(mm, addr, fsr, tsk);
|
|
|
up_read(&mm->mmap_sem);
|
|
|
|
|
|
+ perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, addr);
|
|
|
+ if (fault & VM_FAULT_MAJOR)
|
|
|
+ perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, regs, addr);
|
|
|
+ else if (fault & VM_FAULT_MINOR)
|
|
|
+ perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, regs, addr);
|
|
|
+
|
|
|
/*
|
|
|
* Handle the "normal" case first - VM_FAULT_MAJOR / VM_FAULT_MINOR
|
|
|
*/
|