diff options
author | Philippe Langlais <philippe.langlais@linaro.org> | 2011-03-14 15:40:02 +0100 |
---|---|---|
committer | Robert Marklund <robert.marklund@stericsson.com> | 2011-05-04 18:05:03 +0200 |
commit | 4c4b0de3bcc618a95754f1c3975f408022aecdc4 (patch) | |
tree | 9a64820607a67a8ef4ca0f4210d64f9b84ee31e5 /kernel | |
parent | d9837993845b4343391eb10a153e287b22f71ed6 (diff) |
trace: add STM trace hooks for printk, trace_printk, trace_function, stack trace and scheduler wakeup/context switch tracing
Signed-off-by: Philippe Langlais <philippe.langlais@linaro.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/printk.c | 4 | ||||
-rw-r--r-- | kernel/trace/trace.c | 10 | ||||
-rw-r--r-- | kernel/trace/trace_events.c | 3 | ||||
-rw-r--r-- | kernel/trace/trace_sched_switch.c | 10 |
4 files changed, 27 insertions, 0 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 99373ab79a4..121bac3ca25 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -41,6 +41,7 @@ #include <linux/notifier.h> #include <linux/rculist.h> #include <trace/kernel.h> +#include <trace/stm.h> #include <asm/uaccess.h> @@ -783,6 +784,9 @@ asmlinkage int vprintk(const char *fmt, va_list args) p = printk_buf; + /* Send printk buffer to MIPI STM trace hardware too if enable */ + stm_dup_printk(printk_buf, printed_len); + /* Do we have a loglevel in the string? */ if (p[0] == '<') { unsigned char c = p[1]; diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index dc53ecb8058..fac980bdfb4 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -37,6 +37,7 @@ #include <linux/init.h> #include <linux/poll.h> #include <linux/fs.h> +#include <trace/stm.h> #include "trace.h" #include "trace_output.h" @@ -1214,6 +1215,8 @@ trace_function(struct trace_array *tr, if (!filter_check_discard(call, entry, buffer, event)) ring_buffer_unlock_commit(buffer, event); + + stm_ftrace(ip, parent_ip); } void @@ -1248,8 +1251,11 @@ static void __ftrace_trace_stack(struct ring_buffer *buffer, trace.entries = entry->caller; save_stack_trace(&trace); + if (!filter_check_discard(call, entry, buffer, event)) ring_buffer_unlock_commit(buffer, event); + + stm_stack_trace(trace.entries); } void ftrace_trace_stack(struct ring_buffer *buffer, unsigned long flags, @@ -1405,6 +1411,8 @@ int trace_vbprintk(unsigned long ip, const char *fmt, va_list args) ftrace_trace_stack(buffer, flags, 6, pc); } + stm_trace_bprintk_buf(ip, fmt, trace_buf, sizeof(u32) * len); + out_unlock: arch_spin_unlock(&trace_buf_lock); local_irq_restore(flags); @@ -1481,6 +1489,8 @@ int trace_array_vprintk(struct trace_array *tr, ftrace_trace_stack(buffer, irq_flags, 6, pc); } + stm_trace_printk_buf(ip, trace_buf, len); + out_unlock: arch_spin_unlock(&trace_buf_lock); raw_local_irq_restore(irq_flags); diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c index 5f499e0438a..be9223a7bd8 100644 --- a/kernel/trace/trace_events.c +++ b/kernel/trace/trace_events.c @@ -19,6 +19,7 @@ #include <linux/delay.h> #include <asm/setup.h> +#include <trace/stm.h> #include "trace_output.h" @@ -1644,6 +1645,8 @@ function_test_events_call(unsigned long ip, unsigned long parent_ip) trace_nowake_buffer_unlock_commit(buffer, event, flags, pc); + stm_ftrace(ip, parent_ip); + out: atomic_dec(&per_cpu(ftrace_test_event_disable, cpu)); preempt_enable_notrace(); diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c index 8f758d070c4..1c8eb37ec49 100644 --- a/kernel/trace/trace_sched_switch.c +++ b/kernel/trace/trace_sched_switch.c @@ -11,6 +11,7 @@ #include <linux/uaccess.h> #include <linux/ftrace.h> #include <trace/events/sched.h> +#include <trace/stm.h> #include "trace.h" @@ -47,6 +48,10 @@ tracing_sched_switch_trace(struct trace_array *tr, if (!filter_check_discard(call, entry, buffer, event)) trace_buffer_unlock_commit(buffer, event, flags, pc); + + stm_sched_switch(entry->prev_pid, entry->prev_prio, entry->prev_state, + entry->next_pid, entry->next_prio, entry->next_state, + entry->next_cpu); } static void @@ -103,6 +108,11 @@ tracing_sched_wakeup_trace(struct trace_array *tr, if (!filter_check_discard(call, entry, buffer, event)) ring_buffer_unlock_commit(buffer, event); + + stm_sched_wakeup(entry->prev_pid, entry->prev_prio, entry->prev_state, + entry->next_pid, entry->next_prio, entry->next_state, + entry->next_cpu); + ftrace_trace_stack(tr->buffer, flags, 6, pc); ftrace_trace_userstack(tr->buffer, flags, pc); } |