tracing/fgraph: remove unnecessary unlikely()
PATCH 1/1 tracing/fgraph: remove unnecessary unlikely()
WARN_ON() already contains an unlikely(), so it's not necessary to use unlikely.
--- kernel/trace/trace_functions_graph.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
kernel/trace/trace_functions_graph.c +2 -4
@@ -201,9 +201,8 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,if (index <0 ) index +=FTRACE_NOTRACE_DEPTH ; -if (unlikely (index <0 || index >=FTRACE_RETFUNC_DEPTH )) { +if (WARN_ON (index <0 || index >=FTRACE_RETFUNC_DEPTH )) {ftrace_graph_stop (); -WARN_ON (1 );/* Might as well panic, otherwise we have no where to go */ *ret = (unsigned long )panic;return ;
@@ -274,9 +273,8 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)*/ ftrace_graph_return (&trace); -if (unlikely (!ret)) { +if (WARN_ON (!ret)) {ftrace_graph_stop (); -WARN_ON (1 );/* Might as well panic. What else to do? */ ret = (unsigned long )panic; }
Signature · 1 line
2.17.0
Steven Rostedt
maintainerQuoted 2 lines · On Sat, 3 Nov 2018 22:35:37 -0400 Yangtao Li <[email protected]> wrote:
WARN_ON()already contains anunlikely(), so it's not necessary to use unlikely.
NACK... see below.
Quoted 11 lines
Signed-off-by Yangtao Li <[email protected]>--- kernel/trace/trace_functions_graph.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)kernel/trace/trace_functions_graph.c +0
-0
kernel/trace/trace_functions_graph.c ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, · line 204
Quoted 5 lines
kernel/trace/trace_functions_graph.c +1
-1@@ -201,9 +201,8 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,if (index <0 ) index +=FTRACE_NOTRACE_DEPTH ; -if (unlikely (index <0 || index >=FTRACE_RETFUNC_DEPTH )) { +if (WARN_ON (index <0 || index >=FTRACE_RETFUNC_DEPTH )) {
When function graph is enabled, the printk from the warn on will likely be traced as well and trigger the same WARN_ON, which will again cause a recursion loop and crash and reboot the box with no output at all.
kernel/trace/trace_functions_graph.c ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, · line 205
Quoted 1 line
kernel/trace/trace_functions_graph.c +0
-0ftrace_graph_stop ();
Notice that I call ftrace_graph_stop() *before* the WARN_ON(). This disables the ftrace graph tracer and prevents the recursion loop from happening.
There's a reason that the WARN_ON() is placed where it is.
But thanks for the report, it shows that I need to add a comment here so that someone else doesn't send a similar patch in the future.
-- Steve
Quoted 15 lines
kernel/trace/trace_functions_graph.c +1
-3-WARN_ON (1 );/* Might as well panic, otherwise we have no where to go */ *ret = (unsigned long )panic;return ;@@ -274,9 +273,8 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)*/ ftrace_graph_return (&trace); -if (unlikely (!ret)) { +if (WARN_ON (!ret)) {ftrace_graph_stop (); -WARN_ON (1 );/* Might as well panic. What else to do? */ ret = (unsigned long )panic; }
Sorry for this place, I should consider this situation. -- Yangtao
Quoted 60 lines · Steven Rostedt
Quoted 2 lines · On Sat, 3 Nov 2018 22:35:37 -0400 Yangtao Li <[email protected]> wrote:
WARN_ON()already contains anunlikely(), so it's not necessary to use unlikely.NACK... see below.
Quoted 11 lines
Signed-off-by Yangtao Li <[email protected]>--- kernel/trace/trace_functions_graph.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)kernel/trace/trace_functions_graph.c +0
-0kernel/trace/trace_functions_graph.c ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, · line 204
Quoted 5 lines
kernel/trace/trace_functions_graph.c +1
-1@@ -201,9 +201,8 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,if (index <0 ) index +=FTRACE_NOTRACE_DEPTH ; -if (unlikely (index <0 || index >=FTRACE_RETFUNC_DEPTH )) { +if (WARN_ON (index <0 || index >=FTRACE_RETFUNC_DEPTH )) {When function graph is enabled, the printk from the warn on will likely be traced as well and trigger the same
WARN_ON, which will again cause a recursion loop and crash and reboot the box with no output at all.kernel/trace/trace_functions_graph.c ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret, · line 205
Quoted 1 line
kernel/trace/trace_functions_graph.c +0
-0ftrace_graph_stop ();Notice that I call
ftrace_graph_stop()*before* theWARN_ON(). This disables the ftrace graph tracer and prevents the recursion loop from happening.There's a reason that the
WARN_ON()is placed where it is.But thanks for the report, it shows that I need to add a comment here so that someone else doesn't send a similar patch in the future.
-- Steve
Quoted 15 lines
kernel/trace/trace_functions_graph.c +1
-3-WARN_ON (1 );/* Might as well panic, otherwise we have no where to go */ *ret = (unsigned long )panic;return ;@@ -274,9 +273,8 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)*/ ftrace_graph_return (&trace); -if (unlikely (!ret)) { +if (WARN_ON (!ret)) {ftrace_graph_stop (); -WARN_ON (1 );/* Might as well panic. What else to do? */ ret = (unsigned long )panic; }