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 0/2] riscv/ftrace: add WITH_DIRECT_CALLS support Date: Wed, 23 Nov 2022 22:20:23 +0800 [thread overview] Message-ID: <20221123142025.1504030-1-suagrfillet@gmail.com> (raw) This series adds DYNAMIC_FTRACE_WITH_DIRECT_CALLS support for RISC-V. SAMPLE_FTRACE_DIRECT and SAMPLE_FTRACE_DIRECT_MULTI are also included here as the samples for testing DIRECT_CALLS related interface. First, select the DYNAMIC_FTRACE_WITH_DIRECT_CALLS to provide register_ftrace_direct[_multi] interfaces allowing user 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 modify direct_caller. At the same time, the samples in ./samples/ftrace/ can be built as kerenl module for testing these interfaces with SAMPLE_FTRACE_DIRECT and SAMPLE_FTRACE_DIRECT_MULTI selected. Second, to make the direct_caller and the other ftrace hooks (eg. function/fgraph tracer, k[ret]probes) co-exist, a temporary register are 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. The following tests have been passed in my local qemu-riscv64 virt machine. 1. tests with CONFIG_FTRACE_STARTUP_TEST 2. tests of samples/ftrace/ftrace*.ko 3. manual tests with any combination of the following hooks - function/function_graph tracer - ftrace*.ko - kprobe/kretprobe For your reference, here is the log when function tracer, kretprobe and ftrace-direct-too.ko co-hooks the handle_mm_fault function. ``` [root@stage4 tracing]# echo handle_mm_fault > set_ftrace_filter [root@stage4 tracing]# echo 'r:myr handle_mm_fault' > kprobe_events [root@stage4 tracing]# echo function > current_tracer [root@stage4 tracing]# echo 1 > events/kprobes/myr/enable [root@stage4 tracing]# insmod /root/ftrace-direct-too.ko [root@stage4 tracing]# [root@stage4 tracing]# cat trace | tail cat-388 [000] ...1. 583.051438: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) cat-388 [000] ...2. 583.057930: handle_mm_fault <-do_page_fault cat-388 [000] ..... 583.057990: my_direct_func: handle mm fault vma=000000002d9fe19c address=ffffffae9b7000 flags=215 cat-388 [000] ...1. 583.058284: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) tail-389 [001] ...2. 583.059062: handle_mm_fault <-do_page_fault tail-389 [001] ..... 583.059104: my_direct_func: handle mm fault vma=0000000017f3c48e address=aaaaaabebf3000 flags=215 tail-389 [001] ...1. 583.059325: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) tail-389 [001] ...2. 583.060371: handle_mm_fault <-do_page_fault tail-389 [001] ..... 583.060410: my_direct_func: handle mm fault vma=0000000017f3c48e address=aaaaaabebf1000 flags=255 tail-389 [001] ...1. 583.060996: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) ``` Note1: This series is based on (riscv/ftrace: make ftrace_caller call ftrace_graph_func) in this repo -> https://github.com/guoren83/linux/commits/ftrace_fixup_v3 . Note2: The checkpatch.pl will output some warnings on this series, like this ``` WARNING: Prefer using '"%s...", __func__' to using 'my_direct_func2', this function's name, in a string 111: FILE: samples/ftrace/ftrace-direct-multi-modify.c:48: +" call my_direct_func2\n" ``` The reason is that checkpatch depends on patch context providing the function name. In the above warning, my_direct_func2 has some codeline distance with the changed trunk, so its declaration doesn't come into the patch, and then the warning jumps out. You may notice the location of `my_ip` variable changes in the 2nd patch. I did that for reducing the warnings to some extent. But killing all the warnings will makes the patch less readable, so I stopped here. -- Song Song Shuai (2): riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support samples/ftrace: add riscv support for SAMPLE_FTRACE_DIRECT[_MULTI] arch/riscv/Kconfig | 3 ++ arch/riscv/include/asm/ftrace.h | 6 ++++ arch/riscv/kernel/mcount-dyn.S | 4 +++ samples/ftrace/ftrace-direct-modify.c | 35 ++++++++++++++++++- samples/ftrace/ftrace-direct-multi-modify.c | 37 +++++++++++++++++++++ samples/ftrace/ftrace-direct-multi.c | 22 ++++++++++++ samples/ftrace/ftrace-direct-too.c | 26 +++++++++++++++ samples/ftrace/ftrace-direct.c | 22 ++++++++++++ 8 files changed, 154 insertions(+), 1 deletion(-) -- 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 0/2] riscv/ftrace: add WITH_DIRECT_CALLS support Date: Wed, 23 Nov 2022 22:20:23 +0800 [thread overview] Message-ID: <20221123142025.1504030-1-suagrfillet@gmail.com> (raw) This series adds DYNAMIC_FTRACE_WITH_DIRECT_CALLS support for RISC-V. SAMPLE_FTRACE_DIRECT and SAMPLE_FTRACE_DIRECT_MULTI are also included here as the samples for testing DIRECT_CALLS related interface. First, select the DYNAMIC_FTRACE_WITH_DIRECT_CALLS to provide register_ftrace_direct[_multi] interfaces allowing user 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 modify direct_caller. At the same time, the samples in ./samples/ftrace/ can be built as kerenl module for testing these interfaces with SAMPLE_FTRACE_DIRECT and SAMPLE_FTRACE_DIRECT_MULTI selected. Second, to make the direct_caller and the other ftrace hooks (eg. function/fgraph tracer, k[ret]probes) co-exist, a temporary register are 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. The following tests have been passed in my local qemu-riscv64 virt machine. 1. tests with CONFIG_FTRACE_STARTUP_TEST 2. tests of samples/ftrace/ftrace*.ko 3. manual tests with any combination of the following hooks - function/function_graph tracer - ftrace*.ko - kprobe/kretprobe For your reference, here is the log when function tracer, kretprobe and ftrace-direct-too.ko co-hooks the handle_mm_fault function. ``` [root@stage4 tracing]# echo handle_mm_fault > set_ftrace_filter [root@stage4 tracing]# echo 'r:myr handle_mm_fault' > kprobe_events [root@stage4 tracing]# echo function > current_tracer [root@stage4 tracing]# echo 1 > events/kprobes/myr/enable [root@stage4 tracing]# insmod /root/ftrace-direct-too.ko [root@stage4 tracing]# [root@stage4 tracing]# cat trace | tail cat-388 [000] ...1. 583.051438: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) cat-388 [000] ...2. 583.057930: handle_mm_fault <-do_page_fault cat-388 [000] ..... 583.057990: my_direct_func: handle mm fault vma=000000002d9fe19c address=ffffffae9b7000 flags=215 cat-388 [000] ...1. 583.058284: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) tail-389 [001] ...2. 583.059062: handle_mm_fault <-do_page_fault tail-389 [001] ..... 583.059104: my_direct_func: handle mm fault vma=0000000017f3c48e address=aaaaaabebf3000 flags=215 tail-389 [001] ...1. 583.059325: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) tail-389 [001] ...2. 583.060371: handle_mm_fault <-do_page_fault tail-389 [001] ..... 583.060410: my_direct_func: handle mm fault vma=0000000017f3c48e address=aaaaaabebf1000 flags=255 tail-389 [001] ...1. 583.060996: myr: (do_page_fault+0x16c/0x5f2 <- handle_mm_fault) ``` Note1: This series is based on (riscv/ftrace: make ftrace_caller call ftrace_graph_func) in this repo -> https://github.com/guoren83/linux/commits/ftrace_fixup_v3 . Note2: The checkpatch.pl will output some warnings on this series, like this ``` WARNING: Prefer using '"%s...", __func__' to using 'my_direct_func2', this function's name, in a string 111: FILE: samples/ftrace/ftrace-direct-multi-modify.c:48: +" call my_direct_func2\n" ``` The reason is that checkpatch depends on patch context providing the function name. In the above warning, my_direct_func2 has some codeline distance with the changed trunk, so its declaration doesn't come into the patch, and then the warning jumps out. You may notice the location of `my_ip` variable changes in the 2nd patch. I did that for reducing the warnings to some extent. But killing all the warnings will makes the patch less readable, so I stopped here. -- Song Song Shuai (2): riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support samples/ftrace: add riscv support for SAMPLE_FTRACE_DIRECT[_MULTI] arch/riscv/Kconfig | 3 ++ arch/riscv/include/asm/ftrace.h | 6 ++++ arch/riscv/kernel/mcount-dyn.S | 4 +++ samples/ftrace/ftrace-direct-modify.c | 35 ++++++++++++++++++- samples/ftrace/ftrace-direct-multi-modify.c | 37 +++++++++++++++++++++ samples/ftrace/ftrace-direct-multi.c | 22 ++++++++++++ samples/ftrace/ftrace-direct-too.c | 26 +++++++++++++++ samples/ftrace/ftrace-direct.c | 22 ++++++++++++ 8 files changed, 154 insertions(+), 1 deletion(-) -- 2.20.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
next 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 Song Shuai [this message] 2022-11-23 14:20 ` [PATCH 0/2] riscv/ftrace: add WITH_DIRECT_CALLS support Song Shuai 2022-11-23 14:20 ` [PATCH 1/2] riscv/ftrace: add DYNAMIC_FTRACE_WITH_DIRECT_CALLS support Song Shuai 2022-11-23 14:20 ` 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-1-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.