coresight: enable stm logging for ftrace events and printk
Dup ftrace event traffic (including writes to trace_marker file from
userspace) to STM. Also dup printk traffic to STM. This allows Linux
tracing and log data to be correlated with other data transported over
STM.
Change-Id: Ieb0b856447f7667eb0005a6a884211dc46f50217
Signed-off-by: Pratik Patel <pratikp@codeaurora.org>
diff --git a/include/linux/coresight-stm.h b/include/linux/coresight-stm.h
index 20c4963..56a6cdf 100644
--- a/include/linux/coresight-stm.h
+++ b/include/linux/coresight-stm.h
@@ -14,12 +14,13 @@
#define __MACH_STM_H
enum {
- OST_ENTITY_NONE = 0x0,
- OST_ENTITY_FTRACE_EVENTS = 0x1,
- OST_ENTITY_TRACE_PRINTK = 0x2,
- OST_ENTITY_TRACE_MARKER = 0x4,
- OST_ENTITY_DEV_NODE = 0x8,
- OST_ENTITY_ALL = 0xF,
+ OST_ENTITY_NONE = 0x00,
+ OST_ENTITY_FTRACE_EVENTS = 0x01,
+ OST_ENTITY_TRACE_PRINTK = 0x02,
+ OST_ENTITY_TRACE_MARKER = 0x04,
+ OST_ENTITY_DEV_NODE = 0x08,
+ OST_ENTITY_PRINTK = 0x10,
+ OST_ENTITY_ALL = 0x1F,
};
enum {
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index 7697249..5d675a7 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -17,6 +17,7 @@
*/
#include <linux/ftrace_event.h>
+#include <linux/coresight-stm.h>
/*
* DECLARE_EVENT_CLASS can be used to add a generic function
@@ -544,9 +545,12 @@
\
{ assign; } \
\
- if (!filter_current_check_discard(buffer, event_call, entry, event)) \
+ if (!filter_current_check_discard(buffer, event_call, entry, event)) { \
+ stm_log(OST_ENTITY_FTRACE_EVENTS, entry, \
+ sizeof(*entry) + __data_size); \
trace_nowake_buffer_unlock_commit(buffer, \
event, irq_flags, pc); \
+ } \
}
/*
* The ftrace_test_probe is compiled out, it is only here as a build time check
diff --git a/kernel/printk.c b/kernel/printk.c
index 4cf4670..90dfdde 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -41,6 +41,7 @@
#include <linux/cpu.h>
#include <linux/notifier.h>
#include <linux/rculist.h>
+#include <linux/coresight-stm.h>
#include <asm/uaccess.h>
@@ -959,6 +960,8 @@
}
}
+ stm_log(OST_ENTITY_PRINTK, printk_buf, printed_len);
+
/*
* Copy the output into log_buf. If the caller didn't provide
* the appropriate log prefix, we insert them here
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 05970ea..b9d1a73 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -38,6 +38,7 @@
#include <linux/poll.h>
#include <linux/nmi.h>
#include <linux/fs.h>
+#include <linux/coresight-stm.h>
#include "trace.h"
#include "trace_output.h"
@@ -1629,6 +1630,7 @@
memcpy(&entry->buf, trace_buf, len);
entry->buf[len] = '\0';
if (!filter_check_discard(call, entry, buffer, event)) {
+ stm_log(OST_ENTITY_TRACE_PRINTK, event, size);
ring_buffer_unlock_commit(buffer, event);
ftrace_trace_stack(buffer, irq_flags, 6, pc);
}
@@ -3826,6 +3828,7 @@
} else
entry->buf[cnt] = '\0';
+ stm_log(OST_ENTITY_TRACE_MARKER, event, size);
ring_buffer_unlock_commit(buffer, event);
written = cnt;