[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <46349332f41f16896afde240973764c385d78cd3.1555568371.git.han_mao@c-sky.com>
Date: Thu, 18 Apr 2019 14:20:40 +0800
From: Mao Han <han_mao@...ky.com>
To: guoren@...nel.org
Cc: linux-kernel@...r.kernel.org, Mao Han <han_mao@...ky.com>
Subject: [PATCH 1/1] csky: add page fault perf event support
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@...ky.com>
---
arch/csky/mm/fault.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c
index e1725f8..d07141d 100644
--- a/arch/csky/mm/fault.c
+++ b/arch/csky/mm/fault.c
@@ -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 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
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;
--
2.7.4
Powered by blists - more mailing lists