ftrace: Add ftrace-direct-multi-modify sample module
v2 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.
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
PATCH v2 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 v2 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 v2 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.
--- 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
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_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
samples/ftrace/ftrace-direct-multi-modify.c new file +152 -0
152 lines not on this page · raw message
Signature · 1 line
2.33.1