diff options
Diffstat (limited to 'kernel/trace/trace.c')
| -rw-r--r-- | kernel/trace/trace.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index a3f7ae9cd8e1..83d38634bc90 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -258,6 +258,9 @@ static const char *trace_options[] = { | |||
| 258 | "sched-tree", | 258 | "sched-tree", |
| 259 | "ftrace_printk", | 259 | "ftrace_printk", |
| 260 | "ftrace_preempt", | 260 | "ftrace_preempt", |
| 261 | #ifdef CONFIG_UNLIKELY_TRACER | ||
| 262 | "unlikely", | ||
| 263 | #endif | ||
| 261 | NULL | 264 | NULL |
| 262 | }; | 265 | }; |
| 263 | 266 | ||
| @@ -1648,6 +1651,18 @@ print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu) | |||
| 1648 | trace_seq_print_cont(s, iter); | 1651 | trace_seq_print_cont(s, iter); |
| 1649 | break; | 1652 | break; |
| 1650 | } | 1653 | } |
| 1654 | case TRACE_UNLIKELY: { | ||
| 1655 | struct trace_unlikely *field; | ||
| 1656 | |||
| 1657 | trace_assign_type(field, entry); | ||
| 1658 | |||
| 1659 | trace_seq_printf(s, "[%s] %s:%s:%d\n", | ||
| 1660 | field->correct ? "correct" : "INCORRECT", | ||
| 1661 | field->func, | ||
| 1662 | field->file, | ||
| 1663 | field->line); | ||
| 1664 | break; | ||
| 1665 | } | ||
| 1651 | default: | 1666 | default: |
| 1652 | trace_seq_printf(s, "Unknown type %d\n", entry->type); | 1667 | trace_seq_printf(s, "Unknown type %d\n", entry->type); |
| 1653 | } | 1668 | } |
| @@ -1787,6 +1802,18 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
| 1787 | return print_return_function(iter); | 1802 | return print_return_function(iter); |
| 1788 | break; | 1803 | break; |
| 1789 | } | 1804 | } |
| 1805 | case TRACE_UNLIKELY: { | ||
| 1806 | struct trace_unlikely *field; | ||
| 1807 | |||
| 1808 | trace_assign_type(field, entry); | ||
| 1809 | |||
| 1810 | trace_seq_printf(s, "[%s] %s:%s:%d\n", | ||
| 1811 | field->correct ? "correct" : "INCORRECT", | ||
| 1812 | field->func, | ||
| 1813 | field->file, | ||
| 1814 | field->line); | ||
| 1815 | break; | ||
| 1816 | } | ||
| 1790 | } | 1817 | } |
| 1791 | return TRACE_TYPE_HANDLED; | 1818 | return TRACE_TYPE_HANDLED; |
| 1792 | } | 1819 | } |
| @@ -2592,6 +2619,7 @@ static int tracing_set_tracer(char *buf) | |||
| 2592 | if (t == current_trace) | 2619 | if (t == current_trace) |
| 2593 | goto out; | 2620 | goto out; |
| 2594 | 2621 | ||
| 2622 | trace_unlikely_disable(); | ||
| 2595 | if (current_trace && current_trace->reset) | 2623 | if (current_trace && current_trace->reset) |
| 2596 | current_trace->reset(tr); | 2624 | current_trace->reset(tr); |
| 2597 | 2625 | ||
| @@ -2599,6 +2627,7 @@ static int tracing_set_tracer(char *buf) | |||
| 2599 | if (t->init) | 2627 | if (t->init) |
| 2600 | t->init(tr); | 2628 | t->init(tr); |
| 2601 | 2629 | ||
| 2630 | trace_unlikely_enable(tr); | ||
| 2602 | out: | 2631 | out: |
| 2603 | mutex_unlock(&trace_types_lock); | 2632 | mutex_unlock(&trace_types_lock); |
| 2604 | 2633 | ||
