lkml.org 
[lkml]   [2018]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC][PATCH 09/14] function_graph: Move ftrace_graph_get_addr() to fgraph.c
    On Wed, Nov 21, 2018 at 08:27:17PM -0500, Steven Rostedt wrote:
    > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
    >
    > Move the function function_graph_get_addr() to fgraph.c, as the management
    > of the curr_ret_stack is going to change, and all the accesses to ret_stack
    > needs to be done in fgraph.c.

    s/ftrace_graph_get_addr/ftrace_graph_ret_addr/

    thanks,

    - Joel

    >
    > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    > ---
    > kernel/trace/fgraph.c | 55 ++++++++++++++++++++++++++++
    > kernel/trace/trace_functions_graph.c | 55 ----------------------------
    > 2 files changed, 55 insertions(+), 55 deletions(-)
    >
    > diff --git a/kernel/trace/fgraph.c b/kernel/trace/fgraph.c
    > index f3a89ecac671..c7d612897e33 100644
    > --- a/kernel/trace/fgraph.c
    > +++ b/kernel/trace/fgraph.c
    > @@ -233,6 +233,61 @@ unsigned long ftrace_return_to_handler(unsigned long frame_pointer)
    > return ret;
    > }
    >
    > +/**
    > + * ftrace_graph_ret_addr - convert a potentially modified stack return address
    > + * to its original value
    > + *
    > + * This function can be called by stack unwinding code to convert a found stack
    > + * return address ('ret') to its original value, in case the function graph
    > + * tracer has modified it to be 'return_to_handler'. If the address hasn't
    > + * been modified, the unchanged value of 'ret' is returned.
    > + *
    > + * 'idx' is a state variable which should be initialized by the caller to zero
    > + * before the first call.
    > + *
    > + * 'retp' is a pointer to the return address on the stack. It's ignored if
    > + * the arch doesn't have HAVE_FUNCTION_GRAPH_RET_ADDR_PTR defined.
    > + */
    > +#ifdef HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
    > +unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
    > + unsigned long ret, unsigned long *retp)
    > +{
    > + int index = task->curr_ret_stack;
    > + int i;
    > +
    > + if (ret != (unsigned long)return_to_handler)
    > + return ret;
    > +
    > + if (index < 0)
    > + return ret;
    > +
    > + for (i = 0; i <= index; i++)
    > + if (task->ret_stack[i].retp == retp)
    > + return task->ret_stack[i].ret;
    > +
    > + return ret;
    > +}
    > +#else /* !HAVE_FUNCTION_GRAPH_RET_ADDR_PTR */
    > +unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
    > + unsigned long ret, unsigned long *retp)
    > +{
    > + int task_idx;
    > +
    > + if (ret != (unsigned long)return_to_handler)
    > + return ret;
    > +
    > + task_idx = task->curr_ret_stack;
    > +
    > + if (!task->ret_stack || task_idx < *idx)
    > + return ret;
    > +
    > + task_idx -= *idx;
    > + (*idx)++;
    > +
    > + return task->ret_stack[task_idx].ret;
    > +}
    > +#endif /* HAVE_FUNCTION_GRAPH_RET_ADDR_PTR */
    > +
    > static struct ftrace_ops graph_ops = {
    > .func = ftrace_stub,
    > .flags = FTRACE_OPS_FL_RECURSION_SAFE |
    > diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
    > index 7c7fd13d2373..0f9cbc30645d 100644
    > --- a/kernel/trace/trace_functions_graph.c
    > +++ b/kernel/trace/trace_functions_graph.c
    > @@ -90,61 +90,6 @@ static void
    > print_graph_duration(struct trace_array *tr, unsigned long long duration,
    > struct trace_seq *s, u32 flags);
    >
    > -/**
    > - * ftrace_graph_ret_addr - convert a potentially modified stack return address
    > - * to its original value
    > - *
    > - * This function can be called by stack unwinding code to convert a found stack
    > - * return address ('ret') to its original value, in case the function graph
    > - * tracer has modified it to be 'return_to_handler'. If the address hasn't
    > - * been modified, the unchanged value of 'ret' is returned.
    > - *
    > - * 'idx' is a state variable which should be initialized by the caller to zero
    > - * before the first call.
    > - *
    > - * 'retp' is a pointer to the return address on the stack. It's ignored if
    > - * the arch doesn't have HAVE_FUNCTION_GRAPH_RET_ADDR_PTR defined.
    > - */
    > -#ifdef HAVE_FUNCTION_GRAPH_RET_ADDR_PTR
    > -unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
    > - unsigned long ret, unsigned long *retp)
    > -{
    > - int index = task->curr_ret_stack;
    > - int i;
    > -
    > - if (ret != (unsigned long)return_to_handler)
    > - return ret;
    > -
    > - if (index < 0)
    > - return ret;
    > -
    > - for (i = 0; i <= index; i++)
    > - if (task->ret_stack[i].retp == retp)
    > - return task->ret_stack[i].ret;
    > -
    > - return ret;
    > -}
    > -#else /* !HAVE_FUNCTION_GRAPH_RET_ADDR_PTR */
    > -unsigned long ftrace_graph_ret_addr(struct task_struct *task, int *idx,
    > - unsigned long ret, unsigned long *retp)
    > -{
    > - int task_idx;
    > -
    > - if (ret != (unsigned long)return_to_handler)
    > - return ret;
    > -
    > - task_idx = task->curr_ret_stack;
    > -
    > - if (!task->ret_stack || task_idx < *idx)
    > - return ret;
    > -
    > - task_idx -= *idx;
    > - (*idx)++;
    > -
    > - return task->ret_stack[task_idx].ret;
    > -}
    > -#endif /* HAVE_FUNCTION_GRAPH_RET_ADDR_PTR */
    > -
    > int __trace_graph_entry(struct trace_array *tr,
    > struct ftrace_graph_ent *trace,
    > unsigned long flags,
    > --
    > 2.19.1
    >
    >

    \
     
     \ /
      Last update: 2018-11-23 04:14    [W:4.718 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site