diff options
author | Pekka Paalanen <pq@iki.fi> | 2008-05-12 15:20:57 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2008-05-24 05:24:53 -0400 |
commit | bd8ac686c73c7e925fcfe0b02dc4e7b947127864 (patch) | |
tree | 7a675c4919429b507bb8e7b09677d96ae30ec561 /kernel/trace/trace.h | |
parent | f984b51e0779a6dd30feedc41404013ca54e5d05 (diff) |
ftrace: mmiotrace, updates
here is a patch that makes mmiotrace work almost well within the tracing
framework. The patch applies on top of my previous patch. I have my own
output formatting in place now.
Summary of changes:
- fix the NULL dereference that was due to not calling tracing_reset()
- add print_line() callback into struct tracer
- implement print_line() for mmiotrace, producing up-to-spec text
- add my output header, but that is not really called in the right place
- rewrote the main structs in mmiotrace
- added two new trace entry types: TRACE_MMIO_RW and TRACE_MMIO_MAP
- made some functions in trace.c non-static
- check current==NULL in tracing_generic_entry_update()
- fix(?) comparison in trace_seq_printf()
Things seem to work fine except a few issues. Markers (text lines injected
into mmiotrace log) are missing, I did not feel hacking them in before we
have variable length entries. My output header is printed only for 'trace'
file, but not 'trace_pipe'. For some reason, despite my quick fix,
iter->trace is NULL in print_trace_line() when called from 'trace_pipe'
file, which means I don't get proper output formatting.
I only tried by loading nouveau.ko, which just detects the card, and that
is traced fine. I didn't try further. Map, two reads and unmap. Works
perfectly.
I am missing the information about overflows, I'd prefer to have a
counter for lost events. I didn't try, but I guess currently there is no
way of knowning when it overflows?
So, not too far from being fully operational, it seems :-)
And looking at the diffstat, there also is some 700-900 lines of user space
code that just became obsolete.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/trace/trace.h')
-rw-r--r-- | kernel/trace/trace.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index c460e85e94ed..0ef9ef74c806 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <asm/atomic.h> | 5 | #include <asm/atomic.h> |
6 | #include <linux/sched.h> | 6 | #include <linux/sched.h> |
7 | #include <linux/clocksource.h> | 7 | #include <linux/clocksource.h> |
8 | #include <linux/mmiotrace.h> | ||
8 | 9 | ||
9 | enum trace_type { | 10 | enum trace_type { |
10 | __TRACE_FIRST_TYPE = 0, | 11 | __TRACE_FIRST_TYPE = 0, |
@@ -14,6 +15,8 @@ enum trace_type { | |||
14 | TRACE_WAKE, | 15 | TRACE_WAKE, |
15 | TRACE_STACK, | 16 | TRACE_STACK, |
16 | TRACE_SPECIAL, | 17 | TRACE_SPECIAL, |
18 | TRACE_MMIO_RW, | ||
19 | TRACE_MMIO_MAP, | ||
17 | 20 | ||
18 | __TRACE_LAST_TYPE | 21 | __TRACE_LAST_TYPE |
19 | }; | 22 | }; |
@@ -75,6 +78,8 @@ struct trace_entry { | |||
75 | struct ctx_switch_entry ctx; | 78 | struct ctx_switch_entry ctx; |
76 | struct special_entry special; | 79 | struct special_entry special; |
77 | struct stack_entry stack; | 80 | struct stack_entry stack; |
81 | struct mmiotrace_rw mmiorw; | ||
82 | struct mmiotrace_map mmiomap; | ||
78 | }; | 83 | }; |
79 | }; | 84 | }; |
80 | 85 | ||
@@ -255,6 +260,15 @@ extern unsigned long ftrace_update_tot_cnt; | |||
255 | extern int DYN_FTRACE_TEST_NAME(void); | 260 | extern int DYN_FTRACE_TEST_NAME(void); |
256 | #endif | 261 | #endif |
257 | 262 | ||
263 | #ifdef CONFIG_MMIOTRACE | ||
264 | extern void __trace_mmiotrace_rw(struct trace_array *tr, | ||
265 | struct trace_array_cpu *data, | ||
266 | struct mmiotrace_rw *rw); | ||
267 | extern void __trace_mmiotrace_map(struct trace_array *tr, | ||
268 | struct trace_array_cpu *data, | ||
269 | struct mmiotrace_map *map); | ||
270 | #endif | ||
271 | |||
258 | #ifdef CONFIG_FTRACE_STARTUP_TEST | 272 | #ifdef CONFIG_FTRACE_STARTUP_TEST |
259 | #ifdef CONFIG_FTRACE | 273 | #ifdef CONFIG_FTRACE |
260 | extern int trace_selftest_startup_function(struct tracer *trace, | 274 | extern int trace_selftest_startup_function(struct tracer *trace, |