Re: [RFC][PATCH 07/14] fgraph: Add new fgraph_ops structure to enable function graph hooks
From: Masami Hiramatsu
Date: Mon Nov 26 2018 - 06:30:56 EST
On Wed, 21 Nov 2018 20:27:15 -0500
Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
> From: "Steven Rostedt (VMware)" <rostedt@xxxxxxxxxxx>
>
> 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@xxxxxxxxxxx>
> ---
> 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@xxxxxxxxxx>