ftrace: Add ftrace-direct-multi-modify sample module
cover ftrace: Add ftrace-direct-multi-modify sample module
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
PATCH 1/3 ftrace: Use direct_ops hash in unregister_ftrace_direct
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.
--- kernel/trace/ftrace.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/trace/ftrace.c +3 -1
@@ -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 );
Signature · 1 line
2.33.1
PATCH 2/3 ftrace: Add cleanup to unregister_ftrace_direct_multi
In reply to Jiri OlsaAdding ops cleanup to unregister_ftrace_direct_multi, so it can be reused in another register call.
--- kernel/trace/ftrace.c | 4 ++++ 1 file changed, 4 insertions(+)
kernel/trace/ftrace.c +4 -0
@@ -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);
Signature · 1 line
2.33.1
PATCH 3/3 ftrace/samples: Add module to test multi direct modify interface
In reply to Jiri OlsaAdding 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.
--- 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
samples/Kconfig +8 -0
@@ -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
samples/ftrace/Makefile +1 -0
@@ -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
samples/ftrace/ftrace-direct-multi-modify.c new file +105 -0
105 lines not on this page · raw message
Signature · 1 line
2.33.1
Re: [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface
Quoted 17 lines · Jiri Olsa
Adding ftrace-direct-multi-modify.ko kernel module that uses
modify_ftrace_direct_multiAPI. 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_multito change the trampoline address for the directftrace_ops. The ftracetrace_pipethen shows trace from both trampolines.Also adding
SAMPLE_FTRACE_MULTI_DIRECTto enable build of direct multi interface sample modules. It's used inMakefile, 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.
Quoted 7 lines
Signed-off-by Jiri Olsa <[email protected]>--- 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.
Re: [PATCH 3/3] ftrace/samples: Add module to test multi direct modify interface
Quoted 26 lines · Heiko Carstens
Quoted 17 lines · Jiri Olsa
Adding ftrace-direct-multi-modify.ko kernel module that uses
modify_ftrace_direct_multiAPI. 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_multito change the trampoline address for the directftrace_ops. The ftracetrace_pipethen shows trace from both trampolines.Also adding
SAMPLE_FTRACE_MULTI_DIRECTto enable build of direct multi interface sample modules. It's used inMakefile, 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.Quoted 7 lines
Signed-off-by Jiri Olsa <[email protected]>--- 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
Quoted 7 lines
I think your series is based on something before 5.16-rc2?
Because there are:
503e45108451("ftrace/samples: add missingKconfigoption 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