diff options
author | Chunyan Zhang <zhang.chunyan@linaro.org> | 2016-11-21 15:57:18 +0800 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2016-11-22 17:40:00 -0500 |
commit | 478409dd683db76cbcfe7bf8332a37f01deb0a2d (patch) | |
tree | aceb894271a28bea11df6930c6ca7227ea5c6c03 /include/linux/trace.h | |
parent | 153aae5f996d4cb3e8a64990b6b09cde4a1529b0 (diff) | |
download | linux-stable-478409dd683db76cbcfe7bf8332a37f01deb0a2d.tar.gz linux-stable-478409dd683db76cbcfe7bf8332a37f01deb0a2d.tar.bz2 linux-stable-478409dd683db76cbcfe7bf8332a37f01deb0a2d.zip |
tracing: Add hook to function tracing for other subsystems to use
Currently Function traces can be only exported to the ring buffer. This
adds a trace_export concept which can process traces and export
them to a registered destination as an addition to the current
one that outputs to Ftrace - i.e. ring buffer.
In this way, if we want function traces to be sent to other destinations
rather than only to the ring buffer, we just need to register a new
trace_export and implement its own .write() function for writing traces to
storage.
With this patch, only function tracing (trace type is TRACE_FN)
is supported.
Link: http://lkml.kernel.org/r/1479715043-6534-2-git-send-email-zhang.chunyan@linaro.org
Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include/linux/trace.h')
-rw-r--r-- | include/linux/trace.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/include/linux/trace.h b/include/linux/trace.h new file mode 100644 index 000000000000..9330a58e2651 --- /dev/null +++ b/include/linux/trace.h @@ -0,0 +1,28 @@ +#ifndef _LINUX_TRACE_H +#define _LINUX_TRACE_H + +#ifdef CONFIG_TRACING +/* + * The trace export - an export of Ftrace output. The trace_export + * can process traces and export them to a registered destination as + * an addition to the current only output of Ftrace - i.e. ring buffer. + * + * If you want traces to be sent to some other place rather than ring + * buffer only, just need to register a new trace_export and implement + * its own .write() function for writing traces to the storage. + * + * next - pointer to the next trace_export + * write - copy traces which have been delt with ->commit() to + * the destination + */ +struct trace_export { + struct trace_export __rcu *next; + void (*write)(const void *, unsigned int); +}; + +int register_ftrace_export(struct trace_export *export); +int unregister_ftrace_export(struct trace_export *export); + +#endif /* CONFIG_TRACING */ + +#endif /* _LINUX_TRACE_H */ |