From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: 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>,
Joel Fernandes <joel@joelfernandes.org>,
Andy Lutomirski <luto@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Namhyung Kim <namhyung@kernel.org>,
"Frank Ch. Eigler" <fche@redhat.com>
Subject: [PATCH 00/16 v3] function_graph: Rewrite to allow multiple users
Date: Fri, 24 May 2019 23:16:33 -0400 [thread overview]
Message-ID: <20190525031633.811342628@goodmis.org> (raw)
The background for this is explained in the V1 version found here:
http://lkml.kernel.org/r/20181122012708.491151844@goodmis.org
The TL;DR; is this:
The function graph tracer required a rewrite, mainly because it
can only allow one callback registered at a time. The main motivation
for this change is to allow kretprobes to use the code of function
graph tracer, which should allow all archs that have function graph
tracing to also have kretprobes with no extra work.
Masami told me that one requirement was to allow the function entry
callback to store data on the shadow stack that can be retrieved by
the the function return callback. I added this, as well as a per-task
variable (used by one of the function graph users).
The two functions to allow the storing of data on the stack and
retrieval of it are:
void *fgraph_reserve_data(int size_in_bytes)
Allows the entry function to reserve up to 4 words of data on
the shadow stack. On success, a pointer to the contents is returned.
This may be only called once per entry function.
void *fgraph_retrieve_data(void)
Allows the return function to retrieve the reserved data that was
allocated by the entry function.
Changes since v2:
http://lkml.kernel.org/r/20190520142001.270067280@goodmis.org
As a request from Peter Zijlstra, I changed the direction of
the stack from growing up, to growing down. It passes some smoke
tests, but I will need to run a lot more tests on it. But I decide
to post this series anyway.
Also changed, was using BULID_BUG_ON() instead of the align tricks,
And also used round_up() to remove another align trick.
I found a bug it patch 4 that was fixed in patch 5, but I fixed
it in patch 4 to keep it bisectable.
Added a few more comments, and also added more boot up self tests to
test more of the passing of data around.
The git repo can be found here:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace.git
ftrace/fgraph-multi-stackdown
Head SHA1: 7e25deae405b75aaaa7d5d98fcafdd79c34f87cb
Steven Rostedt (VMware) (16):
function_graph: Convert ret_stack to a series of longs
fgraph: Use BUILD_BUG_ON() to make sure we have structures divisible by long
fgraph: Have the current->ret_stack go down not up
function_graph: Add an array structure that will allow multiple callbacks
function_graph: Allow multiple users to attach to function graph
function_graph: Remove logic around ftrace_graph_entry and return
ftrace/function_graph: Pass fgraph_ops to function graph callbacks
ftrace: Allow function_graph tracer to be enabled in instances
ftrace: Allow ftrace startup flags exist without dynamic ftrace
function_graph: Have the instances use their own ftrace_ops for filtering
function_graph: Add "task variables" per task for fgraph_ops
function_graph: Move set_graph_function tests to shadow stack global var
function_graph: Move graph depth stored data to shadow stack global var
function_graph: Move graph notrace bit to shadow stack global var
function_graph: Implement fgraph_reserve_data() and fgraph_retrieve_data()
function_graph: Add selftest for passing local variables
----
include/linux/ftrace.h | 37 +-
include/linux/sched.h | 2 +-
kernel/trace/fgraph.c | 870 ++++++++++++++++++++++++++++-------
kernel/trace/ftrace.c | 13 +-
kernel/trace/ftrace_internal.h | 2 -
kernel/trace/trace.h | 132 +++---
kernel/trace/trace_functions.c | 7 +
kernel/trace/trace_functions_graph.c | 96 ++--
kernel/trace/trace_irqsoff.c | 10 +-
kernel/trace/trace_sched_wakeup.c | 10 +-
kernel/trace/trace_selftest.c | 317 ++++++++++++-
11 files changed, 1205 insertions(+), 291 deletions(-)
next reply other threads:[~2019-05-25 3:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-25 3:16 Steven Rostedt [this message]
2019-05-25 3:16 ` [PATCH 01/16 v3] function_graph: Convert ret_stack to a series of longs Steven Rostedt
2019-05-28 9:50 ` Joel Fernandes
2019-05-28 12:58 ` Steven Rostedt
2019-05-28 17:46 ` Joel Fernandes
2019-05-25 3:16 ` [PATCH 02/16 v3] fgraph: Use BUILD_BUG_ON() to make sure we have structures divisible by long Steven Rostedt
2019-05-25 3:16 ` [PATCH 03/16 v3] fgraph: Have the current->ret_stack go down not up Steven Rostedt
2019-05-25 3:16 ` [PATCH 04/16 v3] function_graph: Add an array structure that will allow multiple callbacks Steven Rostedt
2019-05-25 3:16 ` [PATCH 05/16 v3] function_graph: Allow multiple users to attach to function graph Steven Rostedt
2019-05-25 3:16 ` [PATCH 06/16 v3] function_graph: Remove logic around ftrace_graph_entry and return Steven Rostedt
2019-05-25 3:16 ` [PATCH 07/16 v3] ftrace/function_graph: Pass fgraph_ops to function graph callbacks Steven Rostedt
2019-05-25 3:16 ` [PATCH 08/16 v3] ftrace: Allow function_graph tracer to be enabled in instances Steven Rostedt
2019-05-25 3:16 ` [PATCH 09/16 v3] ftrace: Allow ftrace startup flags exist without dynamic ftrace Steven Rostedt
2019-05-25 3:16 ` [PATCH 10/16 v3] function_graph: Have the instances use their own ftrace_ops for filtering Steven Rostedt
2019-05-25 3:16 ` [PATCH 11/16 v3] function_graph: Add "task variables" per task for fgraph_ops Steven Rostedt
2019-05-25 3:16 ` [PATCH 12/16 v3] function_graph: Move set_graph_function tests to shadow stack global var Steven Rostedt
2019-05-25 3:16 ` [PATCH 13/16 v3] function_graph: Move graph depth stored data " Steven Rostedt
2019-05-25 3:16 ` [PATCH 14/16 v3] function_graph: Move graph notrace bit " Steven Rostedt
2019-05-25 3:16 ` [PATCH 15/16 v3] function_graph: Implement fgraph_reserve_data() and fgraph_retrieve_data() Steven Rostedt
2019-05-25 3:16 ` [PATCH 16/16 v3] function_graph: Add selftest for passing local variables Steven Rostedt
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=20190525031633.811342628@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=fche@redhat.com \
--cc=frederic@kernel.org \
--cc=joel@joelfernandes.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=namhyung@kernel.org \
--cc=peterz@infradead.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
all inboxes | Powered by JetHome®