path: root/arch/csky/mm
diff options
authorGuo Ren <>2020-04-01 09:17:02 +0800
committerGuo Ren <>2020-04-03 11:14:17 +0800
commit33e53ae1ce413a081254e686d9b27cc1b3585e2f (patch)
treedd6ddbf5a1707f1d0351143cedc00147a465abf4 /arch/csky/mm
parent000591f1ca3312d9a29e15a9e3fe5c4171f75586 (diff)
csky: Add kprobes supported
This patch enable kprobes, kretprobes, ftrace interface. It utilized software breakpoint and single step debug exceptions, instructions simulation on csky. We use USR_BKPT replace origin instruction, and the kprobe handler prepares an excutable memory slot for out-of-line execution with a copy of the original instruction being probed. Most of instructions could be executed by single-step, but some instructions need origin pc value to execute and we need software simulate these instructions. Signed-off-by: Guo Ren <> Cc: Arnd Bergmann <> Cc: Steven Rostedt (VMware) <>
Diffstat (limited to 'arch/csky/mm')
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c
index 562c7f708749..d3c61b83e195 100644
--- a/arch/csky/mm/fault.c
+++ b/arch/csky/mm/fault.c
@@ -18,6 +18,7 @@
#include <linux/extable.h>
#include <linux/uaccess.h>
#include <linux/perf_event.h>
+#include <linux/kprobes.h>
#include <asm/hardirq.h>
#include <asm/mmu_context.h>
@@ -53,6 +54,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write,
int fault;
unsigned long address = mmu_meh & PAGE_MASK;
+ if (kprobe_page_fault(regs, tsk->thread.trap_no))
+ return;
si_code = SEGV_MAPERR;