[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20181126203049.88df7c2cafed2b30a9d02bb9@kernel.org>
Date: Mon, 26 Nov 2018 20:30:49 +0900
From: Masami Hiramatsu <mhiramat@...nel.org>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: linux-kernel@...r.kernel.org, Ingo Molnar <mingo@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Thomas Gleixner <tglx@...utronix.de>,
Peter Zijlstra <peterz@...radead.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
Josh Poimboeuf <jpoimboe@...hat.com>,
Frederic Weisbecker <frederic@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>,
Andy Lutomirski <luto@...nel.org>,
Mark Rutland <mark.rutland@....com>
Subject: Re: [RFC][PATCH 07/14] fgraph: Add new fgraph_ops structure to
enable function graph hooks
On Wed, 21 Nov 2018 20:27:15 -0500
Steven Rostedt <rostedt@...dmis.org> wrote:
> From: "Steven Rostedt (VMware)" <rostedt@...dmis.org>
>
> Currently the registering of function graph is to pass in a entry and return
> function. We need to have a way to associate those functions together where
> the entry can determine to run the return hook. Having a structure that
> contains both functions will facilitate the process of converting the code
> to be able to do such.
>
> This is similar to the way function hooks are enabled (it passes in
> ftrace_ops). Instead of passing in the functions to use, a single structure
> is passed in to the registering function.
>
> The unregister function is now passed in the fgraph_ops handle. When we
> allow more than one callback to the function graph hooks, this will let the
> system know which one to remove.
>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@...dmis.org>
> ---
> include/linux/ftrace.h | 24 +++++++++++++++++-------
> kernel/trace/fgraph.c | 9 ++++-----
> kernel/trace/ftrace.c | 10 +++++++---
> kernel/trace/trace_functions_graph.c | 21 ++++++++++++++++-----
> kernel/trace/trace_irqsoff.c | 10 +++++++---
> kernel/trace/trace_sched_wakeup.c | 10 +++++++---
> kernel/trace/trace_selftest.c | 8 ++++++--
> 7 files changed, 64 insertions(+), 28 deletions(-)
>
> diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
> index f98063e273e5..477ff9412d26 100644
> --- a/include/linux/ftrace.h
> +++ b/include/linux/ftrace.h
> @@ -749,6 +749,18 @@ typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *); /* entry */
>
> #ifdef CONFIG_FUNCTION_GRAPH_TRACER
>
> +struct fgraph_ops {
> + trace_func_graph_ent_t entryfunc;
> + trace_func_graph_ret_t retfunc;
> + struct fgraph_ops __rcu *next;
> + unsigned long flags;
> + void *private;
> +#ifdef CONFIG_DYNAMIC_FTRACE
> + struct ftrace_ops_hash local_hash;
> + struct ftrace_ops_hash *func_hash;
> +#endif
Hmm, can we introduce these fields when we actually use it?
BTW, would you have any idea for using private field?
Thank you,
--
Masami Hiramatsu <mhiramat@...nel.org>
Powered by blists - more mailing lists