All of lore.kernel.org
 help / color / mirror / Atom feed
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

             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: link
Be 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.