aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv/kernel/ftrace.c
diff options
context:
space:
mode:
authorGravatar Alan Kao <alankao@andestech.com> 2018-02-13 13:13:20 +0800
committerGravatar Palmer Dabbelt <palmer@sifive.com> 2018-04-02 19:59:13 -0700
commitaea4c671fb985e6a9ffc365c43ea6f5e0d737fea (patch)
tree457b661c7f4967fe2e02a708975bacc8d48a311b /arch/riscv/kernel/ftrace.c
parentriscv/ftrace: Add ARCH_SUPPORTS_FTRACE_OPS support (diff)
downloadlinux-aea4c671fb985e6a9ffc365c43ea6f5e0d737fea.tar.gz
linux-aea4c671fb985e6a9ffc365c43ea6f5e0d737fea.tar.bz2
linux-aea4c671fb985e6a9ffc365c43ea6f5e0d737fea.zip
riscv/ftrace: Add DYNAMIC_FTRACE_WITH_REGS support
Cc: Greentime Hu <greentime@andestech.com> Signed-off-by: Alan Kao <alankao@andestech.com> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
Diffstat (limited to 'arch/riscv/kernel/ftrace.c')
-rw-r--r--arch/riscv/kernel/ftrace.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/riscv/kernel/ftrace.c b/arch/riscv/kernel/ftrace.c
index 5bbe1afd9463..48b5353691c3 100644
--- a/arch/riscv/kernel/ftrace.c
+++ b/arch/riscv/kernel/ftrace.c
@@ -106,6 +106,23 @@ int __init ftrace_dyn_arch_init(void)
}
#endif
+#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
+int ftrace_modify_call(struct dyn_ftrace *rec, unsigned long old_addr,
+ unsigned long addr)
+{
+ unsigned int call[2];
+ int ret;
+
+ make_call(rec->ip, old_addr, call);
+ ret = ftrace_check_current_call(rec->ip, call);
+
+ if (ret)
+ return ret;
+
+ return __ftrace_modify_call(rec->ip, addr, true);
+}
+#endif
+
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
/*
* Most of this function is copied from arm64.