diff options
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 723818bc83b4..b77b9a697619 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
@@ -115,7 +115,7 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, | |||
115 | 115 | ||
116 | if (ret == (const char *)(trace_seq_buffer_ptr(p))) | 116 | if (ret == (const char *)(trace_seq_buffer_ptr(p))) |
117 | trace_seq_printf(p, "0x%lx", val); | 117 | trace_seq_printf(p, "0x%lx", val); |
118 | 118 | ||
119 | trace_seq_putc(p, 0); | 119 | trace_seq_putc(p, 0); |
120 | 120 | ||
121 | return ret; | 121 | return ret; |
@@ -443,7 +443,32 @@ lat_print_generic(struct trace_seq *s, struct trace_entry *entry, int cpu) | |||
443 | return trace_print_lat_fmt(s, entry); | 443 | return trace_print_lat_fmt(s, entry); |
444 | } | 444 | } |
445 | 445 | ||
446 | static unsigned long preempt_mark_thresh_us = 100; | 446 | #undef MARK |
447 | #define MARK(v, s) {.val = v, .sym = s} | ||
448 | /* trace overhead mark */ | ||
449 | static const struct trace_mark { | ||
450 | unsigned long long val; /* unit: nsec */ | ||
451 | char sym; | ||
452 | } mark[] = { | ||
453 | MARK(1000000000ULL , '$'), /* 1 sec */ | ||
454 | MARK(1000000ULL , '#'), /* 1000 usecs */ | ||
455 | MARK(100000ULL , '!'), /* 100 usecs */ | ||
456 | MARK(10000ULL , '+'), /* 10 usecs */ | ||
457 | }; | ||
458 | #undef MARK | ||
459 | |||
460 | char trace_find_mark(unsigned long long d) | ||
461 | { | ||
462 | int i; | ||
463 | int size = ARRAY_SIZE(mark); | ||
464 | |||
465 | for (i = 0; i < size; i++) { | ||
466 | if (d >= mark[i].val) | ||
467 | break; | ||
468 | } | ||
469 | |||
470 | return (i == size) ? ' ' : mark[i].sym; | ||
471 | } | ||
447 | 472 | ||
448 | static int | 473 | static int |
449 | lat_print_timestamp(struct trace_iterator *iter, u64 next_ts) | 474 | lat_print_timestamp(struct trace_iterator *iter, u64 next_ts) |
@@ -480,8 +505,7 @@ lat_print_timestamp(struct trace_iterator *iter, u64 next_ts) | |||
480 | trace_seq_printf( | 505 | trace_seq_printf( |
481 | s, " %4lldus%c: ", | 506 | s, " %4lldus%c: ", |
482 | abs_ts, | 507 | abs_ts, |
483 | rel_ts > preempt_mark_thresh_us ? '!' : | 508 | trace_find_mark(rel_ts * NSEC_PER_USEC)); |
484 | rel_ts > 1 ? '+' : ' '); | ||
485 | 509 | ||
486 | } else { /* !verbose && !in_ns */ | 510 | } else { /* !verbose && !in_ns */ |
487 | trace_seq_printf(s, " %4lld: ", abs_ts); | 511 | trace_seq_printf(s, " %4lld: ", abs_ts); |
@@ -663,7 +687,7 @@ int register_ftrace_event(struct trace_event *event) | |||
663 | goto out; | 687 | goto out; |
664 | 688 | ||
665 | } else { | 689 | } else { |
666 | 690 | ||
667 | event->type = next_event_type++; | 691 | event->type = next_event_type++; |
668 | list = &ftrace_event_list; | 692 | list = &ftrace_event_list; |
669 | } | 693 | } |