aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/trace.h
diff options
context:
space:
mode:
authorChunyan Zhang <zhang.chunyan@linaro.org>2016-11-21 15:57:18 +0800
committerSteven Rostedt <rostedt@goodmis.org>2016-11-22 17:40:00 -0500
commit478409dd683db76cbcfe7bf8332a37f01deb0a2d (patch)
treeaceb894271a28bea11df6930c6ca7227ea5c6c03 /include/linux/trace.h
parentselftests: ftrace: Add a testcase for types of kprobe event (diff)
downloadlinux-dev-478409dd683db76cbcfe7bf8332a37f01deb0a2d.tar.xz
linux-dev-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.h28
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 */