* [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
* [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.