Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/ftrace: prepare_ftrace_return() function call order

Steven Rostedt noted that s390 is the only architecture which calls
ftrace_push_return_trace() before ftrace_graph_entry() and therefore has
the small advantage that trace.depth gets initialized automatically.

However this small advantage isn't worth the difference and possible subtle
breakage that may result from this.
So change s390 to have the same function call order like all other
architectures: first ftrace_graph_entry(), then ftrace_push_return_trace()

Reported-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

authored by

Heiko Carstens and committed by
Martin Schwidefsky
05e0baaf 5ff4212f

+5 -6
+5 -6
arch/s390/kernel/ftrace.c
··· 151 151 if (unlikely(atomic_read(&current->tracing_graph_pause))) 152 152 goto out; 153 153 ip = (ip & PSW_ADDR_INSN) - MCOUNT_INSN_SIZE; 154 + trace.func = ip; 155 + trace.depth = current->curr_ret_stack + 1; 156 + /* Only trace if the calling function expects to. */ 157 + if (!ftrace_graph_entry(&trace)) 158 + goto out; 154 159 if (ftrace_push_return_trace(parent, ip, &trace.depth, 0) == -EBUSY) 155 160 goto out; 156 - trace.func = ip; 157 - /* Only trace if the calling function expects to. */ 158 - if (!ftrace_graph_entry(&trace)) { 159 - current->curr_ret_stack--; 160 - goto out; 161 - } 162 161 parent = (unsigned long) return_to_handler; 163 162 out: 164 163 return parent;