diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 4b1122d0df37..ed1032d6f81d 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -101,10 +101,7 @@ static inline void ftrace_enable_cpu(void) | |||
101 | preempt_enable(); | 101 | preempt_enable(); |
102 | } | 102 | } |
103 | 103 | ||
104 | static cpumask_var_t __read_mostly tracing_buffer_mask; | 104 | cpumask_var_t __read_mostly tracing_buffer_mask; |
105 | |||
106 | #define for_each_tracing_cpu(cpu) \ | ||
107 | for_each_cpu(cpu, tracing_buffer_mask) | ||
108 | 105 | ||
109 | /* | 106 | /* |
110 | * ftrace_dump_on_oops - variable to dump ftrace buffer on oops | 107 | * ftrace_dump_on_oops - variable to dump ftrace buffer on oops |
@@ -1493,11 +1490,6 @@ int trace_vprintk(unsigned long ip, const char *fmt, va_list args) | |||
1493 | } | 1490 | } |
1494 | EXPORT_SYMBOL_GPL(trace_vprintk); | 1491 | EXPORT_SYMBOL_GPL(trace_vprintk); |
1495 | 1492 | ||
1496 | enum trace_file_type { | ||
1497 | TRACE_FILE_LAT_FMT = 1, | ||
1498 | TRACE_FILE_ANNOTATE = 2, | ||
1499 | }; | ||
1500 | |||
1501 | static void trace_iterator_increment(struct trace_iterator *iter) | 1493 | static void trace_iterator_increment(struct trace_iterator *iter) |
1502 | { | 1494 | { |
1503 | /* Don't allow ftrace to trace into the ring buffers */ | 1495 | /* Don't allow ftrace to trace into the ring buffers */ |
@@ -1595,7 +1587,7 @@ struct trace_entry *trace_find_next_entry(struct trace_iterator *iter, | |||
1595 | } | 1587 | } |
1596 | 1588 | ||
1597 | /* Find the next real entry, and increment the iterator to the next entry */ | 1589 | /* Find the next real entry, and increment the iterator to the next entry */ |
1598 | static void *find_next_entry_inc(struct trace_iterator *iter) | 1590 | void *trace_find_next_entry_inc(struct trace_iterator *iter) |
1599 | { | 1591 | { |
1600 | iter->ent = __find_next_entry(iter, &iter->cpu, | 1592 | iter->ent = __find_next_entry(iter, &iter->cpu, |
1601 | &iter->lost_events, &iter->ts); | 1593 | &iter->lost_events, &iter->ts); |
@@ -1630,19 +1622,19 @@ static void *s_next(struct seq_file *m, void *v, loff_t *pos) | |||
1630 | return NULL; | 1622 | return NULL; |
1631 | 1623 | ||
1632 | if (iter->idx < 0) | 1624 | if (iter->idx < 0) |
1633 | ent = find_next_entry_inc(iter); | 1625 | ent = trace_find_next_entry_inc(iter); |
1634 | else | 1626 | else |
1635 | ent = iter; | 1627 | ent = iter; |
1636 | 1628 | ||
1637 | while (ent && iter->idx < i) | 1629 | while (ent && iter->idx < i) |
1638 | ent = find_next_entry_inc(iter); | 1630 | ent = trace_find_next_entry_inc(iter); |
1639 | 1631 | ||
1640 | iter->pos = *pos; | 1632 | iter->pos = *pos; |
1641 | 1633 | ||
1642 | return ent; | 1634 | return ent; |
1643 | } | 1635 | } |
1644 | 1636 | ||
1645 | static void tracing_iter_reset(struct trace_iterator *iter, int cpu) | 1637 | void tracing_iter_reset(struct trace_iterator *iter, int cpu) |
1646 | { | 1638 | { |
1647 | struct trace_array *tr = iter->tr; | 1639 | struct trace_array *tr = iter->tr; |
1648 | struct ring_buffer_event *event; | 1640 | struct ring_buffer_event *event; |
@@ -2003,7 +1995,7 @@ int trace_empty(struct trace_iterator *iter) | |||
2003 | } | 1995 | } |
2004 | 1996 | ||
2005 | /* Called with trace_event_read_lock() held. */ | 1997 | /* Called with trace_event_read_lock() held. */ |
2006 | static enum print_line_t print_trace_line(struct trace_iterator *iter) | 1998 | enum print_line_t print_trace_line(struct trace_iterator *iter) |
2007 | { | 1999 | { |
2008 | enum print_line_t ret; | 2000 | enum print_line_t ret; |
2009 | 2001 | ||
@@ -3193,7 +3185,7 @@ waitagain: | |||
3193 | 3185 | ||
3194 | trace_event_read_lock(); | 3186 | trace_event_read_lock(); |
3195 | trace_access_lock(iter->cpu_file); | 3187 | trace_access_lock(iter->cpu_file); |
3196 | while (find_next_entry_inc(iter) != NULL) { | 3188 | while (trace_find_next_entry_inc(iter) != NULL) { |
3197 | enum print_line_t ret; | 3189 | enum print_line_t ret; |
3198 | int len = iter->seq.len; | 3190 | int len = iter->seq.len; |
3199 | 3191 | ||
@@ -3276,7 +3268,7 @@ tracing_fill_pipe_page(size_t rem, struct trace_iterator *iter) | |||
3276 | if (ret != TRACE_TYPE_NO_CONSUME) | 3268 | if (ret != TRACE_TYPE_NO_CONSUME) |
3277 | trace_consume(iter); | 3269 | trace_consume(iter); |
3278 | rem -= count; | 3270 | rem -= count; |
3279 | if (!find_next_entry_inc(iter)) { | 3271 | if (!trace_find_next_entry_inc(iter)) { |
3280 | rem = 0; | 3272 | rem = 0; |
3281 | iter->ent = NULL; | 3273 | iter->ent = NULL; |
3282 | break; | 3274 | break; |
@@ -3332,7 +3324,7 @@ static ssize_t tracing_splice_read_pipe(struct file *filp, | |||
3332 | if (ret <= 0) | 3324 | if (ret <= 0) |
3333 | goto out_err; | 3325 | goto out_err; |
3334 | 3326 | ||
3335 | if (!iter->ent && !find_next_entry_inc(iter)) { | 3327 | if (!iter->ent && !trace_find_next_entry_inc(iter)) { |
3336 | ret = -EFAULT; | 3328 | ret = -EFAULT; |
3337 | goto out_err; | 3329 | goto out_err; |
3338 | } | 3330 | } |
@@ -4402,7 +4394,7 @@ static struct notifier_block trace_die_notifier = { | |||
4402 | */ | 4394 | */ |
4403 | #define KERN_TRACE KERN_EMERG | 4395 | #define KERN_TRACE KERN_EMERG |
4404 | 4396 | ||
4405 | static void | 4397 | void |
4406 | trace_printk_seq(struct trace_seq *s) | 4398 | trace_printk_seq(struct trace_seq *s) |
4407 | { | 4399 | { |
4408 | /* Probably should print a warning here. */ | 4400 | /* Probably should print a warning here. */ |
@@ -4417,6 +4409,13 @@ trace_printk_seq(struct trace_seq *s) | |||
4417 | trace_seq_init(s); | 4409 | trace_seq_init(s); |
4418 | } | 4410 | } |
4419 | 4411 | ||
4412 | void trace_init_global_iter(struct trace_iterator *iter) | ||
4413 | { | ||
4414 | iter->tr = &global_trace; | ||
4415 | iter->trace = current_trace; | ||
4416 | iter->cpu_file = TRACE_PIPE_ALL_CPU; | ||
4417 | } | ||
4418 | |||
4420 | static void | 4419 | static void |
4421 | __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) | 4420 | __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) |
4422 | { | 4421 | { |
@@ -4442,8 +4441,10 @@ __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) | |||
4442 | if (disable_tracing) | 4441 | if (disable_tracing) |
4443 | ftrace_kill(); | 4442 | ftrace_kill(); |
4444 | 4443 | ||
4444 | trace_init_global_iter(&iter); | ||
4445 | |||
4445 | for_each_tracing_cpu(cpu) { | 4446 | for_each_tracing_cpu(cpu) { |
4446 | atomic_inc(&global_trace.data[cpu]->disabled); | 4447 | atomic_inc(&iter.tr->data[cpu]->disabled); |
4447 | } | 4448 | } |
4448 | 4449 | ||
4449 | old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ; | 4450 | old_userobj = trace_flags & TRACE_ITER_SYM_USEROBJ; |
@@ -4492,7 +4493,7 @@ __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) | |||
4492 | iter.iter_flags |= TRACE_FILE_LAT_FMT; | 4493 | iter.iter_flags |= TRACE_FILE_LAT_FMT; |
4493 | iter.pos = -1; | 4494 | iter.pos = -1; |
4494 | 4495 | ||
4495 | if (find_next_entry_inc(&iter) != NULL) { | 4496 | if (trace_find_next_entry_inc(&iter) != NULL) { |
4496 | int ret; | 4497 | int ret; |
4497 | 4498 | ||
4498 | ret = print_trace_line(&iter); | 4499 | ret = print_trace_line(&iter); |
@@ -4514,7 +4515,7 @@ __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode) | |||
4514 | trace_flags |= old_userobj; | 4515 | trace_flags |= old_userobj; |
4515 | 4516 | ||
4516 | for_each_tracing_cpu(cpu) { | 4517 | for_each_tracing_cpu(cpu) { |
4517 | atomic_dec(&global_trace.data[cpu]->disabled); | 4518 | atomic_dec(&iter.tr->data[cpu]->disabled); |
4518 | } | 4519 | } |
4519 | tracing_on(); | 4520 | tracing_on(); |
4520 | } | 4521 | } |