[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20140704102525.3fc3d4b1@gandalf.local.home>
Date: Fri, 4 Jul 2014 10:25:25 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>
Cc: linux-kernel@...r.kernel.org, Ingo Molnar <mingo@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Thomas Gleixner <tglx@...utronix.de>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
Namhyung Kim <namhyung@...nel.org>,
"H. Peter Anvin" <hpa@...or.com>, Oleg Nesterov <oleg@...hat.com>,
Josh Poimboeuf <jpoimboe@...hat.com>,
Jiri Kosina <jkosina@...e.cz>,
Seth Jennings <sjenning@...hat.com>,
Jiri Slaby <jslaby@...e.cz>
Subject: Re: [RFC][PATCH 1/3] ftrace/x86: Add dynamic allocated trampoline
for ftrace_ops
On Fri, 04 Jul 2014 22:32:44 +0900
Masami Hiramatsu <masami.hiramatsu.pt@...achi.com> wrote:
> (2014/07/04 5:07), Steven Rostedt wrote:
> > +
> > +void arch_ftrace_update_trampoline(struct ftrace_ops *ops)
> > +{
> > + unsigned char *new;
> > + unsigned long start_offset;
> > + unsigned long call_offset;
> > + unsigned long offset;
> > + unsigned long ip;
> > + int ret;
> > +
> > + if (ops->trampoline) {
> > + /*
> > + * The ftrace_ops caller may set up its own trampoline.
> > + * In such a case, this code must not modify it.
> > + */
> > + if (!(ops->flags & FTRACE_OPS_FL_ALLOC_TRAMP))
> > + return;
>
> Just a question, what happen if the ftrace_ops caller sets up a trampoline which is
> not compatible to the ftrace's trampoline, and the ftrace_ops conflicts on a IP with other
> ftrace_ops? I guess in that case ftrace will use the loop callback on the IP, but since
> the trampoline is not compatible, the result will not be same, is that right? :)
If the caller sets up a trampoline, it must not set the ALLOC_TRAMP
flag. If you look at the comment about that flag it states this:
+ * ALLOC_TRAMP - A dynamic trampoline was allocated by the core code.
+ * The arch specific code sets this flag when it allocated a
+ * trampoline. This lets the arch know that it can update the
+ * trampoline in case the callback function changes.
+ * The ftrace_ops trampoline can be set by the ftrace users, and
+ * in such cases the arch must not modify it. Only the arch ftrace
+ * core code should set this flag.
That last line is important. Only the arch ftrace code (the one that
may modify it with arch_ftrace_update_trampoline should set the
ALLOC_TRAMP flag. That's how it knows if it can modify it or not.
The function_graph tracer sets up its own trampoline. Although it needs
to go through some hoops there because it shares the ftrace_ops with
the function tracer. Thus, it has to store the trampoline and this flag
before registering ftrace ops, and then it has to restore it when it
unregisters.
-- Steve
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists