Re: [PATCH 1/2] tracing/wakeup: Balance prolog on fgraph failure
From: Steven Rostedt <rostedt@goodmis.org>
Date: 2025-10-08 15:22:23
Also in:
lkml
Subsystem:
the rest, tracing, tracing os noise / latency tracers · Maintainers:
Linus Torvalds, Steven Rostedt, Masami Hiramatsu
On Mon, 6 Oct 2025 13:58:47 -0400 Sasha Levin [off-list ref] wrote:
quoted hunk ↗ jump to hunk
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c index bf1cb80742aed..fa48bbdf0851c 100644 --- a/kernel/trace/trace_sched_wakeup.c +++ b/kernel/trace/trace_sched_wakeup.c@@ -138,8 +138,11 @@ static int wakeup_graph_entry(struct ftrace_graph_ent *trace, return 0; calltime = fgraph_reserve_data(gops->idx, sizeof(*calltime)); - if (!calltime) + if (!calltime) { + local_dec(&data->disabled); + preempt_enable_notrace(); return 0; + } *calltime = trace_clock_local();@@ -169,8 +172,11 @@ static void wakeup_graph_return(struct ftrace_graph_ret *trace, rettime = trace_clock_local(); calltime = fgraph_retrieve_data(gops->idx, &size); - if (!calltime) + if (!calltime) { + local_dec(&data->disabled); + preempt_enable_notrace(); return; + } __trace_graph_return(tr, trace, trace_ctx, *calltime, rettime); local_dec(&data->disabled);
Technically correct, but this would look better:
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
index bf1cb80742ae..e3f2e4f56faa 100644
--- a/kernel/trace/trace_sched_wakeup.c
+++ b/kernel/trace/trace_sched_wakeup.c@@ -138,12 +138,10 @@ static int wakeup_graph_entry(struct ftrace_graph_ent *trace, return 0; calltime = fgraph_reserve_data(gops->idx, sizeof(*calltime)); - if (!calltime) - return 0; - - *calltime = trace_clock_local(); - - ret = __trace_graph_entry(tr, trace, trace_ctx); + if (calltime) { + *calltime = trace_clock_local(); + ret = __trace_graph_entry(tr, trace, trace_ctx); + } local_dec(&data->disabled); preempt_enable_notrace();
@@ -169,12 +167,10 @@ static void wakeup_graph_return(struct ftrace_graph_ret *trace, rettime = trace_clock_local(); calltime = fgraph_retrieve_data(gops->idx, &size); - if (!calltime) - return; + if (calltime) + __trace_graph_return(tr, trace, trace_ctx, *calltime, rettime); - __trace_graph_return(tr, trace, trace_ctx, *calltime, rettime); local_dec(&data->disabled); - preempt_enable_notrace(); return; } -- Steve