* [PATCH 0/3] ftrace: Add ftrace-direct-multi-modify sample module
@ 2021-12-05 23:20 Jiri Olsa
2021-12-05 23:20 ` [PATCH 1/3] ftrace: Use direct_ops hash in unregister_ftrace_direct Jiri Olsa
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Jiri Olsa @ 2021-12-05 23:20 UTC (permalink / raw)
To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens
hi,
this patchset adds ftrace-direct-multi-modify.ko kernel module
that shows the usage of modify_ftrace_direct_multi API. Plus
two additional small fixes for ftrace direct code.
thanks,
jirka
---
Jiri Olsa (3):
ftrace: Use direct_ops hash in unregister_ftrace_direct
ftrace: Add cleanup to unregister_ftrace_direct_multi
ftrace/samples: Add module to test multi direct modify interface
kernel/trace/ftrace.c | 8 +++++++-
samples/Kconfig | 8 ++++++++
samples/ftrace/Makefile | 1 +
samples/ftrace/ftrace-direct-multi-modify.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 121 insertions(+), 1 deletion(-)
create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] ftrace: Use direct_ops hash in unregister_ftrace_direct 2021-12-05 23:20 [PATCH 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa @ 2021-12-05 23:20 ` Jiri Olsa 2021-12-05 23:20 ` [PATCH 2/3] ftrace: Add cleanup to unregister_ftrace_direct_multi Jiri Olsa 2021-12-05 23:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa 2 siblings, 0 replies; 7+ messages in thread From: Jiri Olsa @ 2021-12-05 23:20 UTC (permalink / raw) To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens Now when we have *direct_multi interface the direct_functions hash is no longer owned just by direct_ops. It's also used by any other ftrace_ops passed to *direct_multi interface. Thus to find out that we are unregistering the last function from direct_ops, we need to check directly direct_ops's hash. Fixes: f64dd4627ec6 ("ftrace: Add multi direct register/unregister interface") Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- kernel/trace/ftrace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 30bc880c3849..7f0594e28226 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -5217,6 +5217,7 @@ int unregister_ftrace_direct(unsigned long ip, unsigned long addr) { struct ftrace_direct_func *direct; struct ftrace_func_entry *entry; + struct ftrace_hash *hash; int ret = -ENODEV; mutex_lock(&direct_mutex); @@ -5225,7 +5226,8 @@ int unregister_ftrace_direct(unsigned long ip, unsigned long addr) if (!entry) goto out_unlock; - if (direct_functions->count == 1) + hash = direct_ops.func_hash->filter_hash; + if (hash->count == 1) unregister_ftrace_function(&direct_ops); ret = ftrace_set_filter_ip(&direct_ops, ip, 1, 0); -- 2.33.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] ftrace: Add cleanup to unregister_ftrace_direct_multi 2021-12-05 23:20 [PATCH 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa 2021-12-05 23:20 ` [PATCH 1/3] ftrace: Use direct_ops hash in unregister_ftrace_direct Jiri Olsa @ 2021-12-05 23:20 ` Jiri Olsa 2021-12-05 23:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa 2 siblings, 0 replies; 7+ messages in thread From: Jiri Olsa @ 2021-12-05 23:20 UTC (permalink / raw) To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens Adding ops cleanup to unregister_ftrace_direct_multi, so it can be reused in another register call. Fixes: f64dd4627ec6 ("ftrace: Add multi direct register/unregister interface") Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- kernel/trace/ftrace.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 7f0594e28226..be5f6b32a012 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -5542,6 +5542,10 @@ int unregister_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr) err = unregister_ftrace_function(ops); remove_direct_functions_hash(hash, addr); mutex_unlock(&direct_mutex); + + /* cleanup for possible another register call */ + ops->func = NULL; + ops->trampoline = 0; return err; } EXPORT_SYMBOL_GPL(unregister_ftrace_direct_multi); -- 2.33.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface 2021-12-05 23:20 [PATCH 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa 2021-12-05 23:20 ` [PATCH 1/3] ftrace: Use direct_ops hash in unregister_ftrace_direct Jiri Olsa 2021-12-05 23:20 ` [PATCH 2/3] ftrace: Add cleanup to unregister_ftrace_direct_multi Jiri Olsa @ 2021-12-05 23:20 ` Jiri Olsa 2021-12-06 11:25 ` Heiko Carstens 2 siblings, 1 reply; 7+ messages in thread From: Jiri Olsa @ 2021-12-05 23:20 UTC (permalink / raw) To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens Adding ftrace-direct-multi-modify.ko kernel module that uses modify_ftrace_direct_multi API. The core functionality is taken from ftrace-direct-modify.ko kernel module and changed to fit multi direct interface. The init function creates kthread that periodically calls modify_ftrace_direct_multi to change the trampoline address for the direct ftrace_ops. The ftrace trace_pipe then shows trace from both trampolines. Also adding SAMPLE_FTRACE_MULTI_DIRECT to enable build of direct multi interface sample modules. It's used in Makefile, but not defined at the moment. Same as for ftrace-direct-multi.ko, the new module is enabled only for x86_64, so there's no need to ifdef the inlined assembly. Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- samples/Kconfig | 8 ++ samples/ftrace/Makefile | 1 + samples/ftrace/ftrace-direct-multi-modify.c | 105 ++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c diff --git a/samples/Kconfig b/samples/Kconfig index bec3528aa2de..38daae5a06b5 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -31,6 +31,14 @@ config SAMPLE_FTRACE_DIRECT This builds an ftrace direct function example that hooks to wake_up_process and prints the parameters. +config SAMPLE_FTRACE_MULTI_DIRECT + tristate "Build register_ftrace_direct_multi() examples" + depends on DYNAMIC_FTRACE_WITH_DIRECT_CALLS && m + depends on HAVE_SAMPLE_FTRACE_MULTI_DIRECT + help + This builds an ftrace direct multi function examples + that hooks trampolines to multiple functions. + config SAMPLE_TRACE_ARRAY tristate "Build sample module for kernel access to Ftrace instancess" depends on EVENT_TRACING && m diff --git a/samples/ftrace/Makefile b/samples/ftrace/Makefile index e8a3f8520a44..027d375890f8 100644 --- a/samples/ftrace/Makefile +++ b/samples/ftrace/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct.o obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-too.o obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-modify.o obj-$(CONFIG_SAMPLE_FTRACE_MULTI_DIRECT) += ftrace-direct-multi.o +obj-$(CONFIG_SAMPLE_FTRACE_MULTI_DIRECT) += ftrace-direct-multi-modify.o CFLAGS_sample-trace-array.o := -I$(src) obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += sample-trace-array.o diff --git a/samples/ftrace/ftrace-direct-multi-modify.c b/samples/ftrace/ftrace-direct-multi-modify.c new file mode 100644 index 000000000000..ba309cb33c77 --- /dev/null +++ b/samples/ftrace/ftrace-direct-multi-modify.c @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include <linux/module.h> +#include <linux/kthread.h> +#include <linux/ftrace.h> + +void my_direct_func1(unsigned long ip) +{ + trace_printk("my direct func1 ip %lx\n", ip); +} + +void my_direct_func2(unsigned long ip) +{ + trace_printk("my direct func2 ip %lx\n", ip); +} + +extern void my_tramp1(void *); +extern void my_tramp2(void *); + +asm ( +" .pushsection .text, \"ax\", @progbits\n" +" .type my_tramp1, @function\n" +" .globl my_tramp1\n" +" my_tramp1:" +" pushq %rbp\n" +" movq %rsp, %rbp\n" +" pushq %rdi\n" +" movq 8(%rbp), %rdi\n" +" call my_direct_func1\n" +" popq %rdi\n" +" leave\n" +" ret\n" +" .size my_tramp1, .-my_tramp1\n" +" .type my_tramp2, @function\n" +"\n" +" .globl my_tramp2\n" +" my_tramp2:" +" pushq %rbp\n" +" movq %rsp, %rbp\n" +" pushq %rdi\n" +" movq 8(%rbp), %rdi\n" +" call my_direct_func2\n" +" popq %rdi\n" +" leave\n" +" ret\n" +" .size my_tramp2, .-my_tramp2\n" +" .popsection\n" +); + +static unsigned long my_tramp = (unsigned long)my_tramp1; +static unsigned long tramps[2] = { + (unsigned long)my_tramp1, + (unsigned long)my_tramp2, +}; + +static struct ftrace_ops direct; + +static int simple_thread(void *arg) +{ + static int t; + int ret = 0; + + while (!kthread_should_stop()) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(2 * HZ); + + if (ret) + continue; + t ^= 1; + ret = modify_ftrace_direct_multi(&direct, tramps[t]); + if (!ret) + my_tramp = tramps[t]; + WARN_ON_ONCE(ret); + } + + return 0; +} + +static struct task_struct *simple_tsk; + +static int __init ftrace_direct_multi_init(void) +{ + int ret; + + ftrace_set_filter_ip(&direct, (unsigned long) wake_up_process, 0, 0); + ftrace_set_filter_ip(&direct, (unsigned long) schedule, 0, 0); + + ret = register_ftrace_direct_multi(&direct, my_tramp); + + if (!ret) + simple_tsk = kthread_run(simple_thread, NULL, "event-sample-fn"); + return ret; +} + +static void __exit ftrace_direct_multi_exit(void) +{ + kthread_stop(simple_tsk); + unregister_ftrace_direct_multi(&direct, my_tramp); +} + +module_init(ftrace_direct_multi_init); +module_exit(ftrace_direct_multi_exit); + +MODULE_AUTHOR("Jiri Olsa"); +MODULE_DESCRIPTION("Example use case of using modify_ftrace_direct_multi()"); +MODULE_LICENSE("GPL"); -- 2.33.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface 2021-12-05 23:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa @ 2021-12-06 11:25 ` Heiko Carstens 2021-12-06 12:28 ` Jiri Olsa 0 siblings, 1 reply; 7+ messages in thread From: Heiko Carstens @ 2021-12-06 11:25 UTC (permalink / raw) To: Jiri Olsa; +Cc: Steven Rostedt, Ingo Molnar, lkml On Mon, Dec 06, 2021 at 12:20:36AM +0100, Jiri Olsa wrote: > Adding ftrace-direct-multi-modify.ko kernel module that uses > modify_ftrace_direct_multi API. The core functionality is taken > from ftrace-direct-modify.ko kernel module and changed to fit > multi direct interface. > > The init function creates kthread that periodically calls > modify_ftrace_direct_multi to change the trampoline address > for the direct ftrace_ops. The ftrace trace_pipe then shows > trace from both trampolines. > > Also adding SAMPLE_FTRACE_MULTI_DIRECT to enable build of > direct multi interface sample modules. It's used in Makefile, > but not defined at the moment. > > Same as for ftrace-direct-multi.ko, the new module is enabled > only for x86_64, so there's no need to ifdef the inlined assembly. > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > --- > samples/Kconfig | 8 ++ > samples/ftrace/Makefile | 1 + > samples/ftrace/ftrace-direct-multi-modify.c | 105 ++++++++++++++++++++ > 3 files changed, 114 insertions(+) > create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c I think your series is based on something before 5.16-rc2? Because there are: 503e45108451 ("ftrace/samples: add missing Kconfig option for ftrace direct multi sample") 890e3dc8bb6e ("ftrace/samples: add s390 support for ftrace direct multi sample") Which would conflict with your patches. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface 2021-12-06 11:25 ` Heiko Carstens @ 2021-12-06 12:28 ` Jiri Olsa 0 siblings, 0 replies; 7+ messages in thread From: Jiri Olsa @ 2021-12-06 12:28 UTC (permalink / raw) To: Heiko Carstens; +Cc: Steven Rostedt, Ingo Molnar, lkml On Mon, Dec 06, 2021 at 12:25:37PM +0100, Heiko Carstens wrote: > On Mon, Dec 06, 2021 at 12:20:36AM +0100, Jiri Olsa wrote: > > Adding ftrace-direct-multi-modify.ko kernel module that uses > > modify_ftrace_direct_multi API. The core functionality is taken > > from ftrace-direct-modify.ko kernel module and changed to fit > > multi direct interface. > > > > The init function creates kthread that periodically calls > > modify_ftrace_direct_multi to change the trampoline address > > for the direct ftrace_ops. The ftrace trace_pipe then shows > > trace from both trampolines. > > > > Also adding SAMPLE_FTRACE_MULTI_DIRECT to enable build of > > direct multi interface sample modules. It's used in Makefile, > > but not defined at the moment. > > > > Same as for ftrace-direct-multi.ko, the new module is enabled > > only for x86_64, so there's no need to ifdef the inlined assembly. > > > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > > --- > > samples/Kconfig | 8 ++ > > samples/ftrace/Makefile | 1 + > > samples/ftrace/ftrace-direct-multi-modify.c | 105 ++++++++++++++++++++ > > 3 files changed, 114 insertions(+) > > create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c > > I think your series is based on something before 5.16-rc2? > > Because there are: > 503e45108451 ("ftrace/samples: add missing Kconfig option for ftrace direct multi sample") > 890e3dc8bb6e ("ftrace/samples: add s390 support for ftrace direct multi sample") > > Which would conflict with your patches. ah so we have some of the changes already.. I'll pick it up, rebase and resend thanks, jirka ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCHv2 0/3] ftrace: Add ftrace-direct-multi-modify sample module
@ 2021-12-06 18:20 Jiri Olsa
2021-12-06 18:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa
0 siblings, 1 reply; 7+ messages in thread
From: Jiri Olsa @ 2021-12-06 18:20 UTC (permalink / raw)
To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens
hi,
this patchset adds ftrace-direct-multi-modify.ko kernel module
that shows the usage of modify_ftrace_direct_multi API. Plus
two additional small fixes for ftrace direct code.
v2 changes:
- rebased on top of v5.16-rc4
- added s390x trampolines
thanks,
jirka
---
Jiri Olsa (3):
ftrace: Use direct_ops hash in unregister_ftrace_direct
ftrace: Add cleanup to unregister_ftrace_direct_multi
ftrace/samples: Add module to test multi direct modify interface
kernel/trace/ftrace.c | 8 +++++-
samples/ftrace/Makefile | 1 +
samples/ftrace/ftrace-direct-multi-modify.c | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 160 insertions(+), 1 deletion(-)
create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface 2021-12-06 18:20 [PATCHv2 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa @ 2021-12-06 18:20 ` Jiri Olsa 0 siblings, 0 replies; 7+ messages in thread From: Jiri Olsa @ 2021-12-06 18:20 UTC (permalink / raw) To: Steven Rostedt, Ingo Molnar; +Cc: lkml, Heiko Carstens Adding ftrace-direct-multi-modify.ko kernel module that uses modify_ftrace_direct_multi API. The core functionality is taken from ftrace-direct-modify.ko kernel module and changed to fit multi direct interface. The init function creates kthread that periodically calls modify_ftrace_direct_multi to change the trampoline address for the direct ftrace_ops. The ftrace trace_pipe then shows trace from both trampolines. Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- samples/ftrace/Makefile | 1 + samples/ftrace/ftrace-direct-multi-modify.c | 152 ++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 samples/ftrace/ftrace-direct-multi-modify.c diff --git a/samples/ftrace/Makefile b/samples/ftrace/Makefile index b9198e2eef28..faf8cdb79c5f 100644 --- a/samples/ftrace/Makefile +++ b/samples/ftrace/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct.o obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-too.o obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace-direct-modify.o obj-$(CONFIG_SAMPLE_FTRACE_DIRECT_MULTI) += ftrace-direct-multi.o +obj-$(CONFIG_SAMPLE_FTRACE_DIRECT_MULTI) += ftrace-direct-multi-modify.o CFLAGS_sample-trace-array.o := -I$(src) obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += sample-trace-array.o diff --git a/samples/ftrace/ftrace-direct-multi-modify.c b/samples/ftrace/ftrace-direct-multi-modify.c new file mode 100644 index 000000000000..91bc42a7adb9 --- /dev/null +++ b/samples/ftrace/ftrace-direct-multi-modify.c @@ -0,0 +1,152 @@ +// SPDX-License-Identifier: GPL-2.0-only +#include <linux/module.h> +#include <linux/kthread.h> +#include <linux/ftrace.h> +#include <asm/asm-offsets.h> + +void my_direct_func1(unsigned long ip) +{ + trace_printk("my direct func1 ip %lx\n", ip); +} + +void my_direct_func2(unsigned long ip) +{ + trace_printk("my direct func2 ip %lx\n", ip); +} + +extern void my_tramp1(void *); +extern void my_tramp2(void *); + +#ifdef CONFIG_X86_64 + +asm ( +" .pushsection .text, \"ax\", @progbits\n" +" .type my_tramp1, @function\n" +" .globl my_tramp1\n" +" my_tramp1:" +" pushq %rbp\n" +" movq %rsp, %rbp\n" +" pushq %rdi\n" +" movq 8(%rbp), %rdi\n" +" call my_direct_func1\n" +" popq %rdi\n" +" leave\n" +" ret\n" +" .size my_tramp1, .-my_tramp1\n" +" .type my_tramp2, @function\n" +"\n" +" .globl my_tramp2\n" +" my_tramp2:" +" pushq %rbp\n" +" movq %rsp, %rbp\n" +" pushq %rdi\n" +" movq 8(%rbp), %rdi\n" +" call my_direct_func2\n" +" popq %rdi\n" +" leave\n" +" ret\n" +" .size my_tramp2, .-my_tramp2\n" +" .popsection\n" +); + +#endif /* CONFIG_X86_64 */ + +#ifdef CONFIG_S390 + +asm ( +" .pushsection .text, \"ax\", @progbits\n" +" .type my_tramp1, @function\n" +" .globl my_tramp1\n" +" my_tramp1:" +" lgr %r1,%r15\n" +" stmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +" stg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +" aghi %r15,"__stringify(-STACK_FRAME_OVERHEAD)"\n" +" stg %r1,"__stringify(__SF_BACKCHAIN)"(%r15)\n" +" lgr %r2,%r0\n" +" brasl %r14,my_direct_func1\n" +" aghi %r15,"__stringify(STACK_FRAME_OVERHEAD)"\n" +" lmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +" lg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +" lgr %r1,%r0\n" +" br %r1\n" +" .size my_tramp1, .-my_tramp1\n" +"\n" +" .type my_tramp2, @function\n" +" .globl my_tramp2\n" +" my_tramp2:" +" lgr %r1,%r15\n" +" stmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +" stg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +" aghi %r15,"__stringify(-STACK_FRAME_OVERHEAD)"\n" +" stg %r1,"__stringify(__SF_BACKCHAIN)"(%r15)\n" +" lgr %r2,%r0\n" +" brasl %r14,my_direct_func2\n" +" aghi %r15,"__stringify(STACK_FRAME_OVERHEAD)"\n" +" lmg %r0,%r5,"__stringify(__SF_GPRS)"(%r15)\n" +" lg %r14,"__stringify(__SF_GPRS+8*8)"(%r15)\n" +" lgr %r1,%r0\n" +" br %r1\n" +" .size my_tramp2, .-my_tramp2\n" +" .popsection\n" +); + +#endif /* CONFIG_S390 */ + +static unsigned long my_tramp = (unsigned long)my_tramp1; +static unsigned long tramps[2] = { + (unsigned long)my_tramp1, + (unsigned long)my_tramp2, +}; + +static struct ftrace_ops direct; + +static int simple_thread(void *arg) +{ + static int t; + int ret = 0; + + while (!kthread_should_stop()) { + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout(2 * HZ); + + if (ret) + continue; + t ^= 1; + ret = modify_ftrace_direct_multi(&direct, tramps[t]); + if (!ret) + my_tramp = tramps[t]; + WARN_ON_ONCE(ret); + } + + return 0; +} + +static struct task_struct *simple_tsk; + +static int __init ftrace_direct_multi_init(void) +{ + int ret; + + ftrace_set_filter_ip(&direct, (unsigned long) wake_up_process, 0, 0); + ftrace_set_filter_ip(&direct, (unsigned long) schedule, 0, 0); + + ret = register_ftrace_direct_multi(&direct, my_tramp); + + if (!ret) + simple_tsk = kthread_run(simple_thread, NULL, "event-sample-fn"); + return ret; +} + +static void __exit ftrace_direct_multi_exit(void) +{ + kthread_stop(simple_tsk); + unregister_ftrace_direct_multi(&direct, my_tramp); +} + +module_init(ftrace_direct_multi_init); +module_exit(ftrace_direct_multi_exit); + +MODULE_AUTHOR("Jiri Olsa"); +MODULE_DESCRIPTION("Example use case of using modify_ftrace_direct_multi()"); +MODULE_LICENSE("GPL"); -- 2.33.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-12-06 18:21 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-12-05 23:20 [PATCH 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa 2021-12-05 23:20 ` [PATCH 1/3] ftrace: Use direct_ops hash in unregister_ftrace_direct Jiri Olsa 2021-12-05 23:20 ` [PATCH 2/3] ftrace: Add cleanup to unregister_ftrace_direct_multi Jiri Olsa 2021-12-05 23:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa 2021-12-06 11:25 ` Heiko Carstens 2021-12-06 12:28 ` Jiri Olsa -- strict thread matches above, loose matches on Subject: below -- 2021-12-06 18:20 [PATCHv2 0/3] ftrace: Add ftrace-direct-multi-modify sample module Jiri Olsa 2021-12-06 18:20 ` [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface Jiri Olsa
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.