From: Joel Fernandes <joel@joelfernandes.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Frederic Weisbecker <frederic@kernel.org>,
Andy Lutomirski <luto@kernel.org>,
Mark Rutland <mark.rutland@arm.com>
Subject: Re: [RFC][PATCH 09/14] function_graph: Move ftrace_graph_get_addr() to fgraph.c
Date: Thu, 22 Nov 2018 19:13:38 -0800 [thread overview]
Message-ID: <20181123031338.GC17060@google.com> (raw)
In-Reply-To: <20181122012803.843285508@goodmis.org>
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
>
>
next prev parent reply other threads:[~2018-11-23 3:13 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-22 1:27 [RFC][PATCH 00/14] function_graph: Rewrite to allow multiple users Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 01/14] fgraph: Create a fgraph.c file to store function graph infrastructure Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 02/14] fgraph: Have set_graph_notrace only affect function_graph tracer Steven Rostedt
2018-11-23 0:01 ` Namhyung Kim
2018-11-23 17:37 ` Steven Rostedt
2018-11-24 5:49 ` Namhyung Kim
2018-11-24 18:41 ` Steven Rostedt
2018-11-26 4:54 ` Namhyung Kim
2018-11-22 1:27 ` [RFC][PATCH 03/14] arm64: function_graph: Remove use of FTRACE_NOTRACE_DEPTH Steven Rostedt
2018-11-27 19:31 ` Will Deacon
2018-11-27 19:50 ` Steven Rostedt
2018-12-05 21:50 ` [PATCH 03/14 v2] " Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 04/14] function_graph: Remove the " Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 05/14] ftrace: Create new ftrace-internal.h header Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 06/14] fgraph: Move function graph specific code into fgraph.c Steven Rostedt
2018-11-23 6:11 ` Joel Fernandes
2018-11-23 17:58 ` Steven Rostedt
2018-11-23 18:11 ` Steven Rostedt
2018-11-23 22:13 ` Joel Fernandes
2018-11-26 7:25 ` Masami Hiramatsu
2018-11-22 1:27 ` [RFC][PATCH 07/14] fgraph: Add new fgraph_ops structure to enable function graph hooks Steven Rostedt
2018-11-23 2:59 ` Joel Fernandes
2018-11-23 18:25 ` Steven Rostedt
2018-11-26 11:30 ` Masami Hiramatsu
2018-11-26 21:06 ` Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 08/14] function_graph: Remove unused task_curr_ret_stack() Steven Rostedt
2018-11-26 7:40 ` Masami Hiramatsu
2018-11-26 21:26 ` Steven Rostedt
2018-11-26 10:02 ` Joey Pabalinas
2018-11-26 21:27 ` Steven Rostedt
2018-11-26 21:37 ` Joey Pabalinas
2018-11-22 1:27 ` [RFC][PATCH 09/14] function_graph: Move ftrace_graph_get_addr() to fgraph.c Steven Rostedt
2018-11-23 3:13 ` Joel Fernandes [this message]
2018-11-23 19:25 ` Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 10/14] function_graph: Have profiler use new helper ftrace_graph_get_ret_stack() Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 11/14] function_graph: Convert ret_stack to a series of longs Steven Rostedt
2018-11-24 5:31 ` Joel Fernandes
2018-11-26 16:07 ` Masami Hiramatsu
2018-11-26 16:26 ` Steven Rostedt
2018-11-28 1:38 ` Joel Fernandes
2018-11-26 21:31 ` Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 12/14] function_graph: Add an array structure that will allow multiple callbacks Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 13/14] function_graph: Allow multiple users to attach to function graph Steven Rostedt
2018-11-22 1:27 ` [RFC][PATCH 14/14] function_graph: Allow for more than one callback to be registered Steven Rostedt
2018-11-22 10:08 ` [RFC][PATCH 00/14] function_graph: Rewrite to allow multiple users Peter Zijlstra
2018-11-22 12:46 ` Steven Rostedt
2018-11-22 13:42 ` Peter Zijlstra
2018-11-26 9:21 ` Masami Hiramatsu
2018-11-26 16:32 ` Steven Rostedt
2018-11-29 14:29 ` Masami Hiramatsu
2018-11-29 16:46 ` Steven Rostedt
2018-11-30 2:26 ` Masami Hiramatsu
2018-11-30 3:24 ` Steven Rostedt
2018-11-30 14:11 ` Masami Hiramatsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181123031338.GC17060@google.com \
--to=joel@joelfernandes.org \
--cc=akpm@linux-foundation.org \
--cc=frederic@kernel.org \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).