FAILED: patch "[PATCH] function_graph: Create function_graph_enter() to consolidate" failed to apply to 4.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
8114865ff82e200b383e46821c25cb0625b842b5Mon Sep 17 00:00:00 2001
From: "Steven Rostedt (VMware)" <[email protected]>
Date: Sun, 18 Nov 2018 17:10:15 -0500
Subject: [PATCH] function_graph: Create function_graph_enter() to consolidate
architecture code
Currently all the architectures do basically the same thing in preparing the function graph tracer on entry to a function. This code can be pulled into a generic location and then this will allow the function graph tracer to be fixed, as well as extended.
Create a new function graph helper function_graph_enter() that will call the hook function (ftrace_graph_entry) and the shadow stack operation (ftrace_push_return_trace), and remove the need of the architecture code to manage the shadow stack.
This is needed to prepare for a fix of a design bug on how the curr_ret_stack is used.
include/linux/ftrace.h +3 -0
@@ -779,6 +779,9 @@ extern void return_to_handler(void);extern int ftrace_push_return_trace (unsigned long ret,unsigned long func,int *depth,unsigned long frame_pointer,unsigned long *retp); +extern int +function_graph_enter (unsigned long ret,unsigned long func, +unsigned long frame_pointer,unsigned long *retp);unsigned long ftrace_graph_ret_addr (struct task_struct *task,int *idx,unsigned long ret,unsigned long *retp);
kernel/trace/trace_functions_graph.c +16 -0
@@ -182,6 +182,22 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,return 0 ; } +int function_graph_enter (unsigned long ret,unsigned long func, +unsigned long frame_pointer,unsigned long *retp) +{ +struct ftrace_graph_ent trace; + + trace.func = func; + trace.depth = current->curr_ret_stack +1 ; + +/* Only trace if the calling function expects to */ +if (!ftrace_graph_entry (&trace)) +return -EBUSY ; + +return ftrace_push_return_trace (ret, func, &trace.depth, + frame_pointer, retp); +} +/* Retrieve a function return address to the trace stack on thread info.*/ static void ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,