Skip to contentSkip to conversation

ftrace: Add ftrace-direct-multi-modify sample module

PATCH Superseded Jiri Olsa 2 participants 6 messages Dec 5, 2021 – Dec 6, 2021

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Jiri Olsa

author
#0 lore raw

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
author
#1 lore raw

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.

Fixes f64dd4627ec6 ("ftrace: Add multi direct register/unregister interface")
---
 kernel/trace/ftrace.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
kernel/trace/ftrace.c +3 -1
index 30bc880c3849..7f0594e28226 100644
@@ -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
author
#2 lore raw

PATCH 2/3 ftrace: Add cleanup to unregister_ftrace_direct_multi

In reply to Jiri Olsa

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")
---
 kernel/trace/ftrace.c | 4 ++++
 1 file changed, 4 insertions(+)
kernel/trace/ftrace.c +4 -0
index 7f0594e28226..be5f6b32a012 100644
@@ -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
author
#3 lore raw

PATCH 3/3 ftrace/samples: Add module to test multi direct modify interface

In reply to Jiri Olsa

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.

---
 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
index bec3528aa2de..38daae5a06b5 100644
@@ -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
index e8a3f8520a44..027d375890f8 100644
@@ -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
#4 lore raw

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_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.

Quoted 7 lines
---
 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.

author
#5 lore raw

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_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.

Quoted 7 lines
---
 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 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