diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-03-05 04:21:49 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-05 04:21:49 -0500 |
| commit | 53664738c122bfe8b0e489fddaf2ab265c9133c8 (patch) | |
| tree | 8121a9fc4021e86499c404e0b1012a36e8d0b00e | |
| parent | c4ef144a9d0803eb0a2d4110ae87e7f34e667ded (diff) | |
| parent | e9d25fe6eaa2c720bb3ea661b660e58d54fa38bf (diff) | |
Merge branch 'tip/tracing/ftrace' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/ftrace
| -rw-r--r-- | kernel/trace/blktrace.c | 1 | ||||
| -rw-r--r-- | kernel/trace/ring_buffer.c | 6 | ||||
| -rw-r--r-- | kernel/trace/trace.c | 83 | ||||
| -rw-r--r-- | kernel/trace/trace.h | 3 | ||||
| -rw-r--r-- | kernel/trace/trace_branch.c | 1 | ||||
| -rw-r--r-- | kernel/trace/trace_irqsoff.c | 8 | ||||
| -rw-r--r-- | kernel/trace/trace_output.c | 32 | ||||
| -rw-r--r-- | kernel/trace/trace_output.h | 1 | ||||
| -rw-r--r-- | kernel/trace/trace_sched_wakeup.c | 8 |
9 files changed, 48 insertions, 95 deletions
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index e82cb9e930cc..e39679a72a3b 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c | |||
| @@ -1231,7 +1231,6 @@ static struct tracer blk_tracer __read_mostly = { | |||
| 1231 | static struct trace_event trace_blk_event = { | 1231 | static struct trace_event trace_blk_event = { |
| 1232 | .type = TRACE_BLK, | 1232 | .type = TRACE_BLK, |
| 1233 | .trace = blk_trace_event_print, | 1233 | .trace = blk_trace_event_print, |
| 1234 | .latency_trace = blk_trace_event_print, | ||
| 1235 | .binary = blk_trace_event_print_binary, | 1234 | .binary = blk_trace_event_print_binary, |
| 1236 | }; | 1235 | }; |
| 1237 | 1236 | ||
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index f2a163db52f9..f7473645b9c6 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c | |||
| @@ -2461,6 +2461,7 @@ int ring_buffer_read_page(struct ring_buffer *buffer, | |||
| 2461 | unsigned long flags; | 2461 | unsigned long flags; |
| 2462 | unsigned int commit; | 2462 | unsigned int commit; |
| 2463 | unsigned int read; | 2463 | unsigned int read; |
| 2464 | u64 save_timestamp; | ||
| 2464 | int ret = -1; | 2465 | int ret = -1; |
| 2465 | 2466 | ||
| 2466 | /* | 2467 | /* |
| @@ -2515,6 +2516,9 @@ int ring_buffer_read_page(struct ring_buffer *buffer, | |||
| 2515 | if (len < size) | 2516 | if (len < size) |
| 2516 | goto out; | 2517 | goto out; |
| 2517 | 2518 | ||
| 2519 | /* save the current timestamp, since the user will need it */ | ||
| 2520 | save_timestamp = cpu_buffer->read_stamp; | ||
| 2521 | |||
| 2518 | /* Need to copy one event at a time */ | 2522 | /* Need to copy one event at a time */ |
| 2519 | do { | 2523 | do { |
| 2520 | memcpy(bpage->data + pos, rpage->data + rpos, size); | 2524 | memcpy(bpage->data + pos, rpage->data + rpos, size); |
| @@ -2531,7 +2535,7 @@ int ring_buffer_read_page(struct ring_buffer *buffer, | |||
| 2531 | 2535 | ||
| 2532 | /* update bpage */ | 2536 | /* update bpage */ |
| 2533 | local_set(&bpage->commit, pos); | 2537 | local_set(&bpage->commit, pos); |
| 2534 | bpage->time_stamp = rpage->time_stamp; | 2538 | bpage->time_stamp = save_timestamp; |
| 2535 | 2539 | ||
| 2536 | /* we copied everything to the beginning */ | 2540 | /* we copied everything to the beginning */ |
| 2537 | read = 0; | 2541 | read = 0; |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index c8abbb0c8397..d1ef43999d9e 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -299,6 +299,7 @@ static const char *trace_options[] = { | |||
| 299 | "sym-userobj", | 299 | "sym-userobj", |
| 300 | "printk-msg-only", | 300 | "printk-msg-only", |
| 301 | "context-info", | 301 | "context-info", |
| 302 | "latency-format", | ||
| 302 | NULL | 303 | NULL |
| 303 | }; | 304 | }; |
| 304 | 305 | ||
| @@ -346,6 +347,9 @@ ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, size_t cnt) | |||
| 346 | int len; | 347 | int len; |
| 347 | int ret; | 348 | int ret; |
| 348 | 349 | ||
| 350 | if (!cnt) | ||
| 351 | return 0; | ||
| 352 | |||
| 349 | if (s->len <= s->readpos) | 353 | if (s->len <= s->readpos) |
| 350 | return -EBUSY; | 354 | return -EBUSY; |
| 351 | 355 | ||
| @@ -353,10 +357,12 @@ ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf, size_t cnt) | |||
| 353 | if (cnt > len) | 357 | if (cnt > len) |
| 354 | cnt = len; | 358 | cnt = len; |
| 355 | ret = copy_to_user(ubuf, s->buffer + s->readpos, cnt); | 359 | ret = copy_to_user(ubuf, s->buffer + s->readpos, cnt); |
| 356 | if (ret) | 360 | if (ret == cnt) |
| 357 | return -EFAULT; | 361 | return -EFAULT; |
| 358 | 362 | ||
| 359 | s->readpos += len; | 363 | cnt -= ret; |
| 364 | |||
| 365 | s->readpos += cnt; | ||
| 360 | return cnt; | 366 | return cnt; |
| 361 | } | 367 | } |
| 362 | 368 | ||
| @@ -375,7 +381,7 @@ ssize_t trace_seq_to_buffer(struct trace_seq *s, void *buf, size_t cnt) | |||
| 375 | if (!ret) | 381 | if (!ret) |
| 376 | return -EFAULT; | 382 | return -EFAULT; |
| 377 | 383 | ||
| 378 | s->readpos += len; | 384 | s->readpos += cnt; |
| 379 | return cnt; | 385 | return cnt; |
| 380 | } | 386 | } |
| 381 | 387 | ||
| @@ -1462,33 +1468,6 @@ static void test_cpu_buff_start(struct trace_iterator *iter) | |||
| 1462 | trace_seq_printf(s, "##### CPU %u buffer started ####\n", iter->cpu); | 1468 | trace_seq_printf(s, "##### CPU %u buffer started ####\n", iter->cpu); |
| 1463 | } | 1469 | } |
| 1464 | 1470 | ||
| 1465 | static enum print_line_t print_lat_fmt(struct trace_iterator *iter) | ||
| 1466 | { | ||
| 1467 | struct trace_seq *s = &iter->seq; | ||
| 1468 | unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); | ||
| 1469 | struct trace_event *event; | ||
| 1470 | struct trace_entry *entry = iter->ent; | ||
| 1471 | |||
| 1472 | test_cpu_buff_start(iter); | ||
| 1473 | |||
| 1474 | event = ftrace_find_event(entry->type); | ||
| 1475 | |||
| 1476 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | ||
| 1477 | if (!trace_print_lat_context(iter)) | ||
| 1478 | goto partial; | ||
| 1479 | } | ||
| 1480 | |||
| 1481 | if (event) | ||
| 1482 | return event->latency_trace(iter, sym_flags); | ||
| 1483 | |||
| 1484 | if (!trace_seq_printf(s, "Unknown type %d\n", entry->type)) | ||
| 1485 | goto partial; | ||
| 1486 | |||
| 1487 | return TRACE_TYPE_HANDLED; | ||
| 1488 | partial: | ||
| 1489 | return TRACE_TYPE_PARTIAL_LINE; | ||
| 1490 | } | ||
| 1491 | |||
| 1492 | static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | 1471 | static enum print_line_t print_trace_fmt(struct trace_iterator *iter) |
| 1493 | { | 1472 | { |
| 1494 | struct trace_seq *s = &iter->seq; | 1473 | struct trace_seq *s = &iter->seq; |
| @@ -1503,8 +1482,13 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
| 1503 | event = ftrace_find_event(entry->type); | 1482 | event = ftrace_find_event(entry->type); |
| 1504 | 1483 | ||
| 1505 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | 1484 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { |
| 1506 | if (!trace_print_context(iter)) | 1485 | if (iter->iter_flags & TRACE_FILE_LAT_FMT) { |
| 1507 | goto partial; | 1486 | if (!trace_print_lat_context(iter)) |
| 1487 | goto partial; | ||
| 1488 | } else { | ||
| 1489 | if (!trace_print_context(iter)) | ||
| 1490 | goto partial; | ||
| 1491 | } | ||
| 1508 | } | 1492 | } |
| 1509 | 1493 | ||
| 1510 | if (event) | 1494 | if (event) |
| @@ -1646,9 +1630,6 @@ static enum print_line_t print_trace_line(struct trace_iterator *iter) | |||
| 1646 | if (trace_flags & TRACE_ITER_RAW) | 1630 | if (trace_flags & TRACE_ITER_RAW) |
| 1647 | return print_raw_fmt(iter); | 1631 | return print_raw_fmt(iter); |
| 1648 | 1632 | ||
| 1649 | if (iter->iter_flags & TRACE_FILE_LAT_FMT) | ||
| 1650 | return print_lat_fmt(iter); | ||
| 1651 | |||
| 1652 | return print_trace_fmt(iter); | 1633 | return print_trace_fmt(iter); |
| 1653 | } | 1634 | } |
| 1654 | 1635 | ||
| @@ -1824,26 +1805,12 @@ static int tracing_open(struct inode *inode, struct file *file) | |||
| 1824 | iter = __tracing_open(inode, file); | 1805 | iter = __tracing_open(inode, file); |
| 1825 | if (IS_ERR(iter)) | 1806 | if (IS_ERR(iter)) |
| 1826 | ret = PTR_ERR(iter); | 1807 | ret = PTR_ERR(iter); |
| 1827 | 1808 | else if (trace_flags & TRACE_ITER_LATENCY_FMT) | |
| 1828 | return ret; | ||
| 1829 | } | ||
| 1830 | |||
| 1831 | static int tracing_lt_open(struct inode *inode, struct file *file) | ||
| 1832 | { | ||
| 1833 | struct trace_iterator *iter; | ||
| 1834 | int ret = 0; | ||
| 1835 | |||
| 1836 | iter = __tracing_open(inode, file); | ||
| 1837 | |||
| 1838 | if (IS_ERR(iter)) | ||
| 1839 | ret = PTR_ERR(iter); | ||
| 1840 | else | ||
| 1841 | iter->iter_flags |= TRACE_FILE_LAT_FMT; | 1809 | iter->iter_flags |= TRACE_FILE_LAT_FMT; |
| 1842 | 1810 | ||
| 1843 | return ret; | 1811 | return ret; |
| 1844 | } | 1812 | } |
| 1845 | 1813 | ||
| 1846 | |||
| 1847 | static void * | 1814 | static void * |
| 1848 | t_next(struct seq_file *m, void *v, loff_t *pos) | 1815 | t_next(struct seq_file *m, void *v, loff_t *pos) |
| 1849 | { | 1816 | { |
| @@ -1922,13 +1889,6 @@ static struct file_operations tracing_fops = { | |||
| 1922 | .release = tracing_release, | 1889 | .release = tracing_release, |
| 1923 | }; | 1890 | }; |
| 1924 | 1891 | ||
| 1925 | static struct file_operations tracing_lt_fops = { | ||
| 1926 | .open = tracing_lt_open, | ||
| 1927 | .read = seq_read, | ||
| 1928 | .llseek = seq_lseek, | ||
| 1929 | .release = tracing_release, | ||
| 1930 | }; | ||
| 1931 | |||
| 1932 | static struct file_operations show_traces_fops = { | 1892 | static struct file_operations show_traces_fops = { |
| 1933 | .open = show_traces_open, | 1893 | .open = show_traces_open, |
| 1934 | .read = seq_read, | 1894 | .read = seq_read, |
| @@ -3049,6 +3009,9 @@ tracing_buffers_read(struct file *filp, char __user *ubuf, | |||
| 3049 | ssize_t ret; | 3009 | ssize_t ret; |
| 3050 | size_t size; | 3010 | size_t size; |
| 3051 | 3011 | ||
| 3012 | if (!count) | ||
| 3013 | return 0; | ||
| 3014 | |||
| 3052 | /* Do we have previous read data to read? */ | 3015 | /* Do we have previous read data to read? */ |
| 3053 | if (info->read < PAGE_SIZE) | 3016 | if (info->read < PAGE_SIZE) |
| 3054 | goto read; | 3017 | goto read; |
| @@ -3073,8 +3036,10 @@ read: | |||
| 3073 | size = count; | 3036 | size = count; |
| 3074 | 3037 | ||
| 3075 | ret = copy_to_user(ubuf, info->spare + info->read, size); | 3038 | ret = copy_to_user(ubuf, info->spare + info->read, size); |
| 3076 | if (ret) | 3039 | if (ret == size) |
| 3077 | return -EFAULT; | 3040 | return -EFAULT; |
| 3041 | size -= ret; | ||
| 3042 | |||
| 3078 | *ppos += size; | 3043 | *ppos += size; |
| 3079 | info->read += size; | 3044 | info->read += size; |
| 3080 | 3045 | ||
| @@ -3918,8 +3883,10 @@ void ftrace_dump(void) | |||
| 3918 | 3883 | ||
| 3919 | printk(KERN_TRACE "Dumping ftrace buffer:\n"); | 3884 | printk(KERN_TRACE "Dumping ftrace buffer:\n"); |
| 3920 | 3885 | ||
| 3886 | /* Simulate the iterator */ | ||
| 3921 | iter.tr = &global_trace; | 3887 | iter.tr = &global_trace; |
| 3922 | iter.trace = current_trace; | 3888 | iter.trace = current_trace; |
| 3889 | iter.cpu_file = TRACE_PIPE_ALL_CPU; | ||
| 3923 | 3890 | ||
| 3924 | /* | 3891 | /* |
| 3925 | * We need to stop all tracing on all CPUS to read the | 3892 | * We need to stop all tracing on all CPUS to read the |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index 561bb5c5d988..12cd119cca32 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
| @@ -651,7 +651,8 @@ enum trace_iterator_flags { | |||
| 651 | TRACE_ITER_USERSTACKTRACE = 0x4000, | 651 | TRACE_ITER_USERSTACKTRACE = 0x4000, |
| 652 | TRACE_ITER_SYM_USEROBJ = 0x8000, | 652 | TRACE_ITER_SYM_USEROBJ = 0x8000, |
| 653 | TRACE_ITER_PRINTK_MSGONLY = 0x10000, | 653 | TRACE_ITER_PRINTK_MSGONLY = 0x10000, |
| 654 | TRACE_ITER_CONTEXT_INFO = 0x20000 /* Print pid/cpu/time */ | 654 | TRACE_ITER_CONTEXT_INFO = 0x20000, /* Print pid/cpu/time */ |
| 655 | TRACE_ITER_LATENCY_FMT = 0x40000, | ||
| 655 | }; | 656 | }; |
| 656 | 657 | ||
| 657 | /* | 658 | /* |
diff --git a/kernel/trace/trace_branch.c b/kernel/trace/trace_branch.c index c2e68d440c4d..aaa0755268b9 100644 --- a/kernel/trace/trace_branch.c +++ b/kernel/trace/trace_branch.c | |||
| @@ -159,7 +159,6 @@ static enum print_line_t trace_branch_print(struct trace_iterator *iter, | |||
| 159 | static struct trace_event trace_branch_event = { | 159 | static struct trace_event trace_branch_event = { |
| 160 | .type = TRACE_BRANCH, | 160 | .type = TRACE_BRANCH, |
| 161 | .trace = trace_branch_print, | 161 | .trace = trace_branch_print, |
| 162 | .latency_trace = trace_branch_print, | ||
| 163 | }; | 162 | }; |
| 164 | 163 | ||
| 165 | static struct tracer branch_trace __read_mostly = | 164 | static struct tracer branch_trace __read_mostly = |
diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index 9e5ebd844158..b923d13e2fad 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c | |||
| @@ -32,6 +32,8 @@ enum { | |||
| 32 | 32 | ||
| 33 | static int trace_type __read_mostly; | 33 | static int trace_type __read_mostly; |
| 34 | 34 | ||
| 35 | static int save_lat_flag; | ||
| 36 | |||
| 35 | #ifdef CONFIG_PREEMPT_TRACER | 37 | #ifdef CONFIG_PREEMPT_TRACER |
| 36 | static inline int | 38 | static inline int |
| 37 | preempt_trace(void) | 39 | preempt_trace(void) |
| @@ -370,6 +372,9 @@ static void stop_irqsoff_tracer(struct trace_array *tr) | |||
| 370 | 372 | ||
| 371 | static void __irqsoff_tracer_init(struct trace_array *tr) | 373 | static void __irqsoff_tracer_init(struct trace_array *tr) |
| 372 | { | 374 | { |
| 375 | save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT; | ||
| 376 | trace_flags |= TRACE_ITER_LATENCY_FMT; | ||
| 377 | |||
| 373 | tracing_max_latency = 0; | 378 | tracing_max_latency = 0; |
| 374 | irqsoff_trace = tr; | 379 | irqsoff_trace = tr; |
| 375 | /* make sure that the tracer is visible */ | 380 | /* make sure that the tracer is visible */ |
| @@ -380,6 +385,9 @@ static void __irqsoff_tracer_init(struct trace_array *tr) | |||
| 380 | static void irqsoff_tracer_reset(struct trace_array *tr) | 385 | static void irqsoff_tracer_reset(struct trace_array *tr) |
| 381 | { | 386 | { |
| 382 | stop_irqsoff_tracer(tr); | 387 | stop_irqsoff_tracer(tr); |
| 388 | |||
| 389 | if (!save_lat_flag) | ||
| 390 | trace_flags &= ~TRACE_ITER_LATENCY_FMT; | ||
| 383 | } | 391 | } |
| 384 | 392 | ||
| 385 | static void irqsoff_tracer_start(struct trace_array *tr) | 393 | static void irqsoff_tracer_start(struct trace_array *tr) |
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 9fc815031b09..306fef84c503 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
| @@ -437,8 +437,6 @@ int register_ftrace_event(struct trace_event *event) | |||
| 437 | 437 | ||
| 438 | if (event->trace == NULL) | 438 | if (event->trace == NULL) |
| 439 | event->trace = trace_nop_print; | 439 | event->trace = trace_nop_print; |
| 440 | if (event->latency_trace == NULL) | ||
| 441 | event->latency_trace = trace_nop_print; | ||
| 442 | if (event->raw == NULL) | 440 | if (event->raw == NULL) |
| 443 | event->raw = trace_nop_print; | 441 | event->raw = trace_nop_print; |
| 444 | if (event->hex == NULL) | 442 | if (event->hex == NULL) |
| @@ -480,29 +478,6 @@ enum print_line_t trace_nop_print(struct trace_iterator *iter, int flags) | |||
| 480 | } | 478 | } |
| 481 | 479 | ||
| 482 | /* TRACE_FN */ | 480 | /* TRACE_FN */ |
| 483 | static enum print_line_t trace_fn_latency(struct trace_iterator *iter, | ||
| 484 | int flags) | ||
| 485 | { | ||
| 486 | struct ftrace_entry *field; | ||
| 487 | struct trace_seq *s = &iter->seq; | ||
| 488 | |||
| 489 | trace_assign_type(field, iter->ent); | ||
| 490 | |||
| 491 | if (!seq_print_ip_sym(s, field->ip, flags)) | ||
| 492 | goto partial; | ||
| 493 | if (!trace_seq_puts(s, " (")) | ||
| 494 | goto partial; | ||
| 495 | if (!seq_print_ip_sym(s, field->parent_ip, flags)) | ||
| 496 | goto partial; | ||
| 497 | if (!trace_seq_puts(s, ")\n")) | ||
| 498 | goto partial; | ||
| 499 | |||
| 500 | return TRACE_TYPE_HANDLED; | ||
| 501 | |||
| 502 | partial: | ||
| 503 | return TRACE_TYPE_PARTIAL_LINE; | ||
| 504 | } | ||
| 505 | |||
| 506 | static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags) | 481 | static enum print_line_t trace_fn_trace(struct trace_iterator *iter, int flags) |
| 507 | { | 482 | { |
| 508 | struct ftrace_entry *field; | 483 | struct ftrace_entry *field; |
| @@ -573,7 +548,6 @@ static enum print_line_t trace_fn_bin(struct trace_iterator *iter, int flags) | |||
| 573 | static struct trace_event trace_fn_event = { | 548 | static struct trace_event trace_fn_event = { |
| 574 | .type = TRACE_FN, | 549 | .type = TRACE_FN, |
| 575 | .trace = trace_fn_trace, | 550 | .trace = trace_fn_trace, |
| 576 | .latency_trace = trace_fn_latency, | ||
| 577 | .raw = trace_fn_raw, | 551 | .raw = trace_fn_raw, |
| 578 | .hex = trace_fn_hex, | 552 | .hex = trace_fn_hex, |
| 579 | .binary = trace_fn_bin, | 553 | .binary = trace_fn_bin, |
| @@ -705,7 +679,6 @@ static enum print_line_t trace_ctxwake_bin(struct trace_iterator *iter, | |||
| 705 | static struct trace_event trace_ctx_event = { | 679 | static struct trace_event trace_ctx_event = { |
| 706 | .type = TRACE_CTX, | 680 | .type = TRACE_CTX, |
| 707 | .trace = trace_ctx_print, | 681 | .trace = trace_ctx_print, |
| 708 | .latency_trace = trace_ctx_print, | ||
| 709 | .raw = trace_ctx_raw, | 682 | .raw = trace_ctx_raw, |
| 710 | .hex = trace_ctx_hex, | 683 | .hex = trace_ctx_hex, |
| 711 | .binary = trace_ctxwake_bin, | 684 | .binary = trace_ctxwake_bin, |
| @@ -714,7 +687,6 @@ static struct trace_event trace_ctx_event = { | |||
| 714 | static struct trace_event trace_wake_event = { | 687 | static struct trace_event trace_wake_event = { |
| 715 | .type = TRACE_WAKE, | 688 | .type = TRACE_WAKE, |
| 716 | .trace = trace_wake_print, | 689 | .trace = trace_wake_print, |
| 717 | .latency_trace = trace_wake_print, | ||
| 718 | .raw = trace_wake_raw, | 690 | .raw = trace_wake_raw, |
| 719 | .hex = trace_wake_hex, | 691 | .hex = trace_wake_hex, |
| 720 | .binary = trace_ctxwake_bin, | 692 | .binary = trace_ctxwake_bin, |
| @@ -770,7 +742,6 @@ static enum print_line_t trace_special_bin(struct trace_iterator *iter, | |||
| 770 | static struct trace_event trace_special_event = { | 742 | static struct trace_event trace_special_event = { |
| 771 | .type = TRACE_SPECIAL, | 743 | .type = TRACE_SPECIAL, |
| 772 | .trace = trace_special_print, | 744 | .trace = trace_special_print, |
| 773 | .latency_trace = trace_special_print, | ||
| 774 | .raw = trace_special_print, | 745 | .raw = trace_special_print, |
| 775 | .hex = trace_special_hex, | 746 | .hex = trace_special_hex, |
| 776 | .binary = trace_special_bin, | 747 | .binary = trace_special_bin, |
| @@ -808,7 +779,6 @@ static enum print_line_t trace_stack_print(struct trace_iterator *iter, | |||
| 808 | static struct trace_event trace_stack_event = { | 779 | static struct trace_event trace_stack_event = { |
| 809 | .type = TRACE_STACK, | 780 | .type = TRACE_STACK, |
| 810 | .trace = trace_stack_print, | 781 | .trace = trace_stack_print, |
| 811 | .latency_trace = trace_stack_print, | ||
| 812 | .raw = trace_special_print, | 782 | .raw = trace_special_print, |
| 813 | .hex = trace_special_hex, | 783 | .hex = trace_special_hex, |
| 814 | .binary = trace_special_bin, | 784 | .binary = trace_special_bin, |
| @@ -838,7 +808,6 @@ static enum print_line_t trace_user_stack_print(struct trace_iterator *iter, | |||
| 838 | static struct trace_event trace_user_stack_event = { | 808 | static struct trace_event trace_user_stack_event = { |
| 839 | .type = TRACE_USER_STACK, | 809 | .type = TRACE_USER_STACK, |
| 840 | .trace = trace_user_stack_print, | 810 | .trace = trace_user_stack_print, |
| 841 | .latency_trace = trace_user_stack_print, | ||
| 842 | .raw = trace_special_print, | 811 | .raw = trace_special_print, |
| 843 | .hex = trace_special_hex, | 812 | .hex = trace_special_hex, |
| 844 | .binary = trace_special_bin, | 813 | .binary = trace_special_bin, |
| @@ -883,7 +852,6 @@ static enum print_line_t trace_print_raw(struct trace_iterator *iter, int flags) | |||
| 883 | static struct trace_event trace_print_event = { | 852 | static struct trace_event trace_print_event = { |
| 884 | .type = TRACE_PRINT, | 853 | .type = TRACE_PRINT, |
| 885 | .trace = trace_print_print, | 854 | .trace = trace_print_print, |
| 886 | .latency_trace = trace_print_print, | ||
| 887 | .raw = trace_print_raw, | 855 | .raw = trace_print_raw, |
| 888 | }; | 856 | }; |
| 889 | 857 | ||
diff --git a/kernel/trace/trace_output.h b/kernel/trace/trace_output.h index 551a25a72217..8a34d688ed63 100644 --- a/kernel/trace/trace_output.h +++ b/kernel/trace/trace_output.h | |||
| @@ -10,7 +10,6 @@ struct trace_event { | |||
| 10 | struct hlist_node node; | 10 | struct hlist_node node; |
| 11 | int type; | 11 | int type; |
| 12 | trace_print_func trace; | 12 | trace_print_func trace; |
| 13 | trace_print_func latency_trace; | ||
| 14 | trace_print_func raw; | 13 | trace_print_func raw; |
| 15 | trace_print_func hex; | 14 | trace_print_func hex; |
| 16 | trace_print_func binary; | 15 | trace_print_func binary; |
diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c index db55f7aaa640..3c5ad6b2ec84 100644 --- a/kernel/trace/trace_sched_wakeup.c +++ b/kernel/trace/trace_sched_wakeup.c | |||
| @@ -32,6 +32,8 @@ static raw_spinlock_t wakeup_lock = | |||
| 32 | 32 | ||
| 33 | static void __wakeup_reset(struct trace_array *tr); | 33 | static void __wakeup_reset(struct trace_array *tr); |
| 34 | 34 | ||
| 35 | static int save_lat_flag; | ||
| 36 | |||
| 35 | #ifdef CONFIG_FUNCTION_TRACER | 37 | #ifdef CONFIG_FUNCTION_TRACER |
| 36 | /* | 38 | /* |
| 37 | * irqsoff uses its own tracer function to keep the overhead down: | 39 | * irqsoff uses its own tracer function to keep the overhead down: |
| @@ -324,6 +326,9 @@ static void stop_wakeup_tracer(struct trace_array *tr) | |||
| 324 | 326 | ||
| 325 | static int __wakeup_tracer_init(struct trace_array *tr) | 327 | static int __wakeup_tracer_init(struct trace_array *tr) |
| 326 | { | 328 | { |
| 329 | save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT; | ||
| 330 | trace_flags |= TRACE_ITER_LATENCY_FMT; | ||
| 331 | |||
| 327 | tracing_max_latency = 0; | 332 | tracing_max_latency = 0; |
| 328 | wakeup_trace = tr; | 333 | wakeup_trace = tr; |
| 329 | start_wakeup_tracer(tr); | 334 | start_wakeup_tracer(tr); |
| @@ -347,6 +352,9 @@ static void wakeup_tracer_reset(struct trace_array *tr) | |||
| 347 | stop_wakeup_tracer(tr); | 352 | stop_wakeup_tracer(tr); |
| 348 | /* make sure we put back any tasks we are tracing */ | 353 | /* make sure we put back any tasks we are tracing */ |
| 349 | wakeup_reset(tr); | 354 | wakeup_reset(tr); |
| 355 | |||
| 356 | if (!save_lat_flag) | ||
| 357 | trace_flags &= ~TRACE_ITER_LATENCY_FMT; | ||
| 350 | } | 358 | } |
| 351 | 359 | ||
| 352 | static void wakeup_tracer_start(struct trace_array *tr) | 360 | static void wakeup_tracer_start(struct trace_array *tr) |
