From: Song Shuai <suagrfillet@gmail.com> To: guoren@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, rostedt@goodmis.org, mhiramat@kernel.org, mark.rutland@arm.com, peterz@infradead.org, jolsa@redhat.com, bp@suse.de, jpoimboe@kernel.org Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Song Shuai <suagrfillet@gmail.com> Subject: [PATCH 1/2] riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support Date: Wed, 23 Nov 2022 22:20:24 +0800 [thread overview] Message-ID: <20221123142025.1504030-2-suagrfillet@gmail.com> (raw) In-Reply-To: <20221123142025.1504030-1-suagrfillet@gmail.com> This patch adds DYNAMIC_FTRACE_WITH_DIRECT_CALLS support for RISC-V. select the DYNAMIC_FTRACE_WITH_DIRECT_CALLS to provide the register_ftrace_direct[_multi] interfaces allowing users to register the customed trampoline (direct_caller) as the mcount for one or more target functions. And modify_ftrace_direct[_multi] are also provided for modifying direct_caller. To make the direct_caller and the other ftrace hooks (eg. function/fgraph tracer, k[ret]probes) co-exist, a temporary register is nominated to store the address of direct_caller in ftrace_regs_caller. After the setting of the address direct_caller by direct_ops->func and the RESTORE_REGS in ftrace_regs_caller, direct_caller will be jumped to by the `jr` inst. Signed-off-by: Song Shuai <suagrfillet@gmail.com> --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/ftrace.h | 6 ++++++ arch/riscv/kernel/mcount-dyn.S | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 39ec8d628cf6..d083ec08d0b6 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -278,6 +278,7 @@ config ARCH_RV64I select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8) select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE + select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL select HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h index 01bebb28eabe..be4d57566139 100644 --- a/arch/riscv/include/asm/ftrace.h +++ b/arch/riscv/include/asm/ftrace.h @@ -114,6 +114,12 @@ struct ftrace_regs; void ftrace_graph_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *op, struct ftrace_regs *fregs); #define ftrace_graph_func ftrace_graph_func + +static inline void arch_ftrace_set_direct_caller(struct pt_regs *regs, unsigned long addr) +{ + regs->t1 = addr; +} + #endif /* CONFIG_DYNAMIC_FTRACE_WITH_REGS */ #endif /* __ASSEMBLY__ */ diff --git a/arch/riscv/kernel/mcount-dyn.S b/arch/riscv/kernel/mcount-dyn.S index 466c6ef217b1..b89c85a58569 100644 --- a/arch/riscv/kernel/mcount-dyn.S +++ b/arch/riscv/kernel/mcount-dyn.S @@ -233,6 +233,7 @@ ENDPROC(ftrace_caller) #else /* CONFIG_DYNAMIC_FTRACE_WITH_REGS */ ENTRY(ftrace_regs_caller) SAVE_ABI_REGS 1 + REG_S x0, PT_T1(sp) PREPARE_ARGS ftrace_regs_call: @@ -241,7 +242,10 @@ ftrace_regs_call: RESTORE_ABI_REGS 1 + bnez t1,.Ldirect jr t0 +.Ldirect: + jr t1 ENDPROC(ftrace_regs_caller) ENTRY(ftrace_caller) -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Song Shuai <suagrfillet@gmail.com> To: guoren@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, rostedt@goodmis.org, mhiramat@kernel.org, mark.rutland@arm.com, peterz@infradead.org, jolsa@redhat.com, bp@suse.de, jpoimboe@kernel.org Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Song Shuai <suagrfillet@gmail.com> Subject: [PATCH 1/2] riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support Date: Wed, 23 Nov 2022 22:20:24 +0800 [thread overview] Message-ID: <20221123142025.1504030-2-suagrfillet@gmail.com> (raw) In-Reply-To: <20221123142025.1504030-1-suagrfillet@gmail.com> This patch adds DYNAMIC_FTRACE_WITH_DIRECT_CALLS support for RISC-V. select the DYNAMIC_FTRACE_WITH_DIRECT_CALLS to provide the register_ftrace_direct[_multi] interfaces allowing users to register the customed trampoline (direct_caller) as the mcount for one or more target functions. And modify_ftrace_direct[_multi] are also provided for modifying direct_caller. To make the direct_caller and the other ftrace hooks (eg. function/fgraph tracer, k[ret]probes) co-exist, a temporary register is nominated to store the address of direct_caller in ftrace_regs_caller. After the setting of the address direct_caller by direct_ops->func and the RESTORE_REGS in ftrace_regs_caller, direct_caller will be jumped to by the `jr` inst. Signed-off-by: Song Shuai <suagrfillet@gmail.com> --- arch/riscv/Kconfig | 1 + arch/riscv/include/asm/ftrace.h | 6 ++++++ arch/riscv/kernel/mcount-dyn.S | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 39ec8d628cf6..d083ec08d0b6 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -278,6 +278,7 @@ config ARCH_RV64I select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8) select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE + select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL select HAVE_FUNCTION_GRAPH_TRACER select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !PREEMPTION diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h index 01bebb28eabe..be4d57566139 100644 --- a/arch/riscv/include/asm/ftrace.h +++ b/arch/riscv/include/asm/ftrace.h @@ -114,6 +114,12 @@ struct ftrace_regs; void ftrace_graph_func(unsigned long ip, unsigned long parent_ip, struct ftrace_ops *op, struct ftrace_regs *fregs); #define ftrace_graph_func ftrace_graph_func + +static inline void arch_ftrace_set_direct_caller(struct pt_regs *regs, unsigned long addr) +{ + regs->t1 = addr; +} + #endif /* CONFIG_DYNAMIC_FTRACE_WITH_REGS */ #endif /* __ASSEMBLY__ */ diff --git a/arch/riscv/kernel/mcount-dyn.S b/arch/riscv/kernel/mcount-dyn.S index 466c6ef217b1..b89c85a58569 100644 --- a/arch/riscv/kernel/mcount-dyn.S +++ b/arch/riscv/kernel/mcount-dyn.S @@ -233,6 +233,7 @@ ENDPROC(ftrace_caller) #else /* CONFIG_DYNAMIC_FTRACE_WITH_REGS */ ENTRY(ftrace_regs_caller) SAVE_ABI_REGS 1 + REG_S x0, PT_T1(sp) PREPARE_ARGS ftrace_regs_call: @@ -241,7 +242,10 @@ ftrace_regs_call: RESTORE_ABI_REGS 1 + bnez t1,.Ldirect jr t0 +.Ldirect: + jr t1 ENDPROC(ftrace_regs_caller) ENTRY(ftrace_caller) -- 2.20.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2022-11-23 14:21 UTC|newest] Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-11-23 14:20 [PATCH 0/2] riscv/ftrace: add WITH_DIRECT_CALLS support Song Shuai 2022-11-23 14:20 ` Song Shuai 2022-11-23 14:20 ` Song Shuai [this message] 2022-11-23 14:20 ` [PATCH 1/2] riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support Song Shuai 2022-11-23 15:15 ` Guo Ren 2022-11-23 15:15 ` Guo Ren [not found] ` <CAJF2gTTwvApRaGhZJxOrdcjWUC9DN-WF_7EKcHXx5HZ9Jkd5EA@mail.gmail.com> 2022-11-23 17:27 ` Song Shuai 2022-11-23 17:27 ` Song Shuai 2022-11-24 2:08 ` Guo Ren 2022-11-24 2:08 ` Guo Ren 2022-11-24 2:52 ` Song Shuai 2022-11-24 2:52 ` Song Shuai 2022-11-24 3:09 ` Song Shuai 2022-11-24 3:09 ` Song Shuai 2022-11-24 3:40 ` Guo Ren 2022-11-24 3:40 ` Guo Ren 2022-11-24 11:48 ` Song Shuai 2022-11-24 11:48 ` Song Shuai 2022-11-24 15:11 ` Guo Ren 2022-11-24 15:11 ` Guo Ren 2022-11-24 15:31 ` Guo Ren 2022-11-24 15:31 ` Guo Ren 2022-11-25 1:53 ` Song Shuai 2022-11-25 1:53 ` Song Shuai 2022-11-25 3:10 ` Guo Ren 2022-11-25 3:10 ` Guo Ren 2022-11-25 6:33 ` Song Shuai 2022-11-25 6:33 ` Song Shuai 2022-11-28 10:12 ` [PATCH 1/2] riscv: ftrace: Add " guoren 2022-11-28 10:12 ` guoren 2022-11-28 10:12 ` [PATCH 2/2] samples: ftrace: Add riscv support for SAMPLE_FTRACE_DIRECT[_MULTI] guoren 2022-11-28 10:12 ` guoren 2022-11-28 10:21 ` Guo Ren 2022-11-28 10:21 ` Guo Ren 2022-11-28 12:55 ` Guo Ren 2022-11-28 12:55 ` Guo Ren 2022-11-28 12:54 ` [PATCH 1/2] riscv: ftrace: Add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support Guo Ren 2022-11-28 12:54 ` Guo Ren 2022-11-28 10:17 ` [PATCH 1/2] riscv/ftrace: add " Guo Ren 2022-11-28 10:17 ` Guo Ren 2022-11-28 12:54 ` Guo Ren 2022-11-28 12:54 ` Guo Ren 2022-11-28 13:16 ` Guo Ren 2022-11-28 13:16 ` Guo Ren 2022-11-28 13:29 ` Song Shuai 2022-11-28 13:29 ` Song Shuai 2022-11-23 14:20 ` [PATCH 2/2] samples/ftrace: add riscv support for SAMPLE_FTRACE_DIRECT[_MULTI] Song Shuai 2022-11-23 14:20 ` Song Shuai
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20221123142025.1504030-2-suagrfillet@gmail.com \ --to=suagrfillet@gmail.com \ --cc=aou@eecs.berkeley.edu \ --cc=bp@suse.de \ --cc=guoren@kernel.org \ --cc=jolsa@redhat.com \ --cc=jpoimboe@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-riscv@lists.infradead.org \ --cc=mark.rutland@arm.com \ --cc=mhiramat@kernel.org \ --cc=palmer@dabbelt.com \ --cc=paul.walmsley@sifive.com \ --cc=peterz@infradead.org \ --cc=rostedt@goodmis.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.