Skip to content

Commit c513d09

Browse files
ftrace: Replace uses of _ftrace_direct APIs with _ftrace_direct_multi
JIRA: https://issues.redhat.com/browse/RHEL-101598 commit 23edf48 Author: Florent Revest <[email protected]> Date: Tue Mar 21 15:04:19 2023 +0100 ftrace: Replace uses of _ftrace_direct APIs with _ftrace_direct_multi The _multi API requires that users keep their own ops but can enforce that an op is only associated to one direct call. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Florent Revest <[email protected]> Acked-by: Mark Rutland <[email protected]> Tested-by: Mark Rutland <[email protected]> Acked-by: Jiri Olsa <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]> Conflicts: - kernel/trace/trace_selftest.c: 2 hunks modified due to already backported fee86a4 ("ftrace: selftest: remove broken trace_direct_tramp") Assisted-by: Patchpal AI Signed-off-by: Jerome Marchand <[email protected]>
1 parent 5c14a0b commit c513d09

File tree

4 files changed

+28
-18
lines changed

4 files changed

+28
-18
lines changed

kernel/trace/trace_selftest.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,7 @@ trace_selftest_startup_function_graph(struct tracer *trace,
810810
}
811811

812812
#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
813+
static struct ftrace_ops direct;
813814
tracing_reset_online_cpus(&tr->array_buffer);
814815
set_graph_array(tr);
815816

@@ -825,8 +826,8 @@ trace_selftest_startup_function_graph(struct tracer *trace,
825826
* Register direct function together with graph tracer
826827
* and make sure we get graph trace.
827828
*/
828-
ret = register_ftrace_direct((unsigned long) DYN_FTRACE_TEST_NAME,
829-
(unsigned long)ftrace_stub_direct_tramp);
829+
ftrace_set_filter_ip(&direct, (unsigned long)DYN_FTRACE_TEST_NAME, 0, 0);
830+
ret = register_ftrace_direct_multi(&direct, (unsigned long)ftrace_stub_direct_tramp);
830831
if (ret)
831832
goto out;
832833

@@ -846,8 +847,9 @@ trace_selftest_startup_function_graph(struct tracer *trace,
846847

847848
unregister_ftrace_graph(&fgraph_ops);
848849

849-
ret = unregister_ftrace_direct((unsigned long) DYN_FTRACE_TEST_NAME,
850-
(unsigned long)ftrace_stub_direct_tramp);
850+
ret = unregister_ftrace_direct_multi(&direct,
851+
(unsigned long)ftrace_stub_direct_tramp,
852+
true);
851853
if (ret)
852854
goto out;
853855

samples/ftrace/ftrace-direct-modify.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ asm (
9696

9797
#endif /* CONFIG_S390 */
9898

99+
static struct ftrace_ops direct;
100+
99101
static unsigned long my_tramp = (unsigned long)my_tramp1;
100102
static unsigned long tramps[2] = {
101103
(unsigned long)my_tramp1,
@@ -114,7 +116,7 @@ static int simple_thread(void *arg)
114116
if (ret)
115117
continue;
116118
t ^= 1;
117-
ret = modify_ftrace_direct(my_ip, my_tramp, tramps[t]);
119+
ret = modify_ftrace_direct_multi(&direct, tramps[t]);
118120
if (!ret)
119121
my_tramp = tramps[t];
120122
WARN_ON_ONCE(ret);
@@ -129,7 +131,9 @@ static int __init ftrace_direct_init(void)
129131
{
130132
int ret;
131133

132-
ret = register_ftrace_direct(my_ip, my_tramp);
134+
ftrace_set_filter_ip(&direct, (unsigned long) my_ip, 0, 0);
135+
ret = register_ftrace_direct_multi(&direct, my_tramp);
136+
133137
if (!ret)
134138
simple_tsk = kthread_run(simple_thread, NULL, "event-sample-fn");
135139
return ret;
@@ -138,12 +142,12 @@ static int __init ftrace_direct_init(void)
138142
static void __exit ftrace_direct_exit(void)
139143
{
140144
kthread_stop(simple_tsk);
141-
unregister_ftrace_direct(my_ip, my_tramp);
145+
unregister_ftrace_direct_multi(&direct, my_tramp, true);
142146
}
143147

144148
module_init(ftrace_direct_init);
145149
module_exit(ftrace_direct_exit);
146150

147151
MODULE_AUTHOR("Steven Rostedt");
148-
MODULE_DESCRIPTION("Example use case of using modify_ftrace_direct()");
152+
MODULE_DESCRIPTION("Example use case of using modify_ftrace_direct_multi()");
149153
MODULE_LICENSE("GPL");

samples/ftrace/ftrace-direct-too.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,23 @@ asm (
7070

7171
#endif /* CONFIG_S390 */
7272

73+
static struct ftrace_ops direct;
74+
7375
static int __init ftrace_direct_init(void)
7476
{
75-
return register_ftrace_direct((unsigned long)handle_mm_fault,
76-
(unsigned long)my_tramp);
77+
ftrace_set_filter_ip(&direct, (unsigned long) handle_mm_fault, 0, 0);
78+
79+
return register_ftrace_direct_multi(&direct, (unsigned long) my_tramp);
7780
}
7881

7982
static void __exit ftrace_direct_exit(void)
8083
{
81-
unregister_ftrace_direct((unsigned long)handle_mm_fault,
82-
(unsigned long)my_tramp);
84+
unregister_ftrace_direct_multi(&direct, (unsigned long)my_tramp, true);
8385
}
8486

8587
module_init(ftrace_direct_init);
8688
module_exit(ftrace_direct_exit);
8789

8890
MODULE_AUTHOR("Steven Rostedt");
89-
MODULE_DESCRIPTION("Another example use case of using register_ftrace_direct()");
91+
MODULE_DESCRIPTION("Another example use case of using register_ftrace_direct_multi()");
9092
MODULE_LICENSE("GPL");

samples/ftrace/ftrace-direct.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,23 @@ asm (
6363

6464
#endif /* CONFIG_S390 */
6565

66+
static struct ftrace_ops direct;
67+
6668
static int __init ftrace_direct_init(void)
6769
{
68-
return register_ftrace_direct((unsigned long)wake_up_process,
69-
(unsigned long)my_tramp);
70+
ftrace_set_filter_ip(&direct, (unsigned long) wake_up_process, 0, 0);
71+
72+
return register_ftrace_direct_multi(&direct, (unsigned long) my_tramp);
7073
}
7174

7275
static void __exit ftrace_direct_exit(void)
7376
{
74-
unregister_ftrace_direct((unsigned long)wake_up_process,
75-
(unsigned long)my_tramp);
77+
unregister_ftrace_direct_multi(&direct, (unsigned long)my_tramp, true);
7678
}
7779

7880
module_init(ftrace_direct_init);
7981
module_exit(ftrace_direct_exit);
8082

8183
MODULE_AUTHOR("Steven Rostedt");
82-
MODULE_DESCRIPTION("Example use case of using register_ftrace_direct()");
84+
MODULE_DESCRIPTION("Example use case of using register_ftrace_direct_multi()");
8385
MODULE_LICENSE("GPL");

0 commit comments

Comments
 (0)