diff options
Diffstat (limited to 'kernel/trace/trace_mmiotrace.c')
-rw-r--r-- | kernel/trace/trace_mmiotrace.c | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c index f28484618ff0..fffcb069f1dc 100644 --- a/kernel/trace/trace_mmiotrace.c +++ b/kernel/trace/trace_mmiotrace.c | |||
@@ -18,46 +18,39 @@ struct header_iter { | |||
18 | 18 | ||
19 | static struct trace_array *mmio_trace_array; | 19 | static struct trace_array *mmio_trace_array; |
20 | static bool overrun_detected; | 20 | static bool overrun_detected; |
21 | static unsigned long prev_overruns; | ||
21 | 22 | ||
22 | static void mmio_reset_data(struct trace_array *tr) | 23 | static void mmio_reset_data(struct trace_array *tr) |
23 | { | 24 | { |
24 | int cpu; | ||
25 | |||
26 | overrun_detected = false; | 25 | overrun_detected = false; |
27 | tr->time_start = ftrace_now(tr->cpu); | 26 | prev_overruns = 0; |
28 | 27 | ||
29 | for_each_online_cpu(cpu) | 28 | tracing_reset_online_cpus(tr); |
30 | tracing_reset(tr, cpu); | ||
31 | } | 29 | } |
32 | 30 | ||
33 | static void mmio_trace_init(struct trace_array *tr) | 31 | static int mmio_trace_init(struct trace_array *tr) |
34 | { | 32 | { |
35 | pr_debug("in %s\n", __func__); | 33 | pr_debug("in %s\n", __func__); |
36 | mmio_trace_array = tr; | 34 | mmio_trace_array = tr; |
37 | if (tr->ctrl) { | 35 | |
38 | mmio_reset_data(tr); | 36 | mmio_reset_data(tr); |
39 | enable_mmiotrace(); | 37 | enable_mmiotrace(); |
40 | } | 38 | return 0; |
41 | } | 39 | } |
42 | 40 | ||
43 | static void mmio_trace_reset(struct trace_array *tr) | 41 | static void mmio_trace_reset(struct trace_array *tr) |
44 | { | 42 | { |
45 | pr_debug("in %s\n", __func__); | 43 | pr_debug("in %s\n", __func__); |
46 | if (tr->ctrl) | 44 | |
47 | disable_mmiotrace(); | 45 | disable_mmiotrace(); |
48 | mmio_reset_data(tr); | 46 | mmio_reset_data(tr); |
49 | mmio_trace_array = NULL; | 47 | mmio_trace_array = NULL; |
50 | } | 48 | } |
51 | 49 | ||
52 | static void mmio_trace_ctrl_update(struct trace_array *tr) | 50 | static void mmio_trace_start(struct trace_array *tr) |
53 | { | 51 | { |
54 | pr_debug("in %s\n", __func__); | 52 | pr_debug("in %s\n", __func__); |
55 | if (tr->ctrl) { | 53 | mmio_reset_data(tr); |
56 | mmio_reset_data(tr); | ||
57 | enable_mmiotrace(); | ||
58 | } else { | ||
59 | disable_mmiotrace(); | ||
60 | } | ||
61 | } | 54 | } |
62 | 55 | ||
63 | static int mmio_print_pcidev(struct trace_seq *s, const struct pci_dev *dev) | 56 | static int mmio_print_pcidev(struct trace_seq *s, const struct pci_dev *dev) |
@@ -128,16 +121,12 @@ static void mmio_close(struct trace_iterator *iter) | |||
128 | 121 | ||
129 | static unsigned long count_overruns(struct trace_iterator *iter) | 122 | static unsigned long count_overruns(struct trace_iterator *iter) |
130 | { | 123 | { |
131 | int cpu; | ||
132 | unsigned long cnt = 0; | 124 | unsigned long cnt = 0; |
133 | /* FIXME: */ | 125 | unsigned long over = ring_buffer_overruns(iter->tr->buffer); |
134 | #if 0 | 126 | |
135 | for_each_online_cpu(cpu) { | 127 | if (over > prev_overruns) |
136 | cnt += iter->overrun[cpu]; | 128 | cnt = over - prev_overruns; |
137 | iter->overrun[cpu] = 0; | 129 | prev_overruns = over; |
138 | } | ||
139 | #endif | ||
140 | (void)cpu; | ||
141 | return cnt; | 130 | return cnt; |
142 | } | 131 | } |
143 | 132 | ||
@@ -298,10 +287,10 @@ static struct tracer mmio_tracer __read_mostly = | |||
298 | .name = "mmiotrace", | 287 | .name = "mmiotrace", |
299 | .init = mmio_trace_init, | 288 | .init = mmio_trace_init, |
300 | .reset = mmio_trace_reset, | 289 | .reset = mmio_trace_reset, |
290 | .start = mmio_trace_start, | ||
301 | .pipe_open = mmio_pipe_open, | 291 | .pipe_open = mmio_pipe_open, |
302 | .close = mmio_close, | 292 | .close = mmio_close, |
303 | .read = mmio_read, | 293 | .read = mmio_read, |
304 | .ctrl_update = mmio_trace_ctrl_update, | ||
305 | .print_line = mmio_print_line, | 294 | .print_line = mmio_print_line, |
306 | }; | 295 | }; |
307 | 296 | ||
@@ -373,5 +362,5 @@ void mmio_trace_mapping(struct mmiotrace_map *map) | |||
373 | 362 | ||
374 | int mmio_trace_printk(const char *fmt, va_list args) | 363 | int mmio_trace_printk(const char *fmt, va_list args) |
375 | { | 364 | { |
376 | return trace_vprintk(0, fmt, args); | 365 | return trace_vprintk(0, -1, fmt, args); |
377 | } | 366 | } |