diff options
Diffstat (limited to 'kernel/trace/trace_selftest.c')
-rw-r--r-- | kernel/trace/trace_selftest.c | 65 |
1 files changed, 5 insertions, 60 deletions
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index 280fea470d67..250e7f9bd2f0 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c | |||
@@ -3,6 +3,7 @@ | |||
3 | #include <linux/stringify.h> | 3 | #include <linux/stringify.h> |
4 | #include <linux/kthread.h> | 4 | #include <linux/kthread.h> |
5 | #include <linux/delay.h> | 5 | #include <linux/delay.h> |
6 | #include <linux/slab.h> | ||
6 | 7 | ||
7 | static inline int trace_valid_entry(struct trace_entry *entry) | 8 | static inline int trace_valid_entry(struct trace_entry *entry) |
8 | { | 9 | { |
@@ -16,7 +17,6 @@ static inline int trace_valid_entry(struct trace_entry *entry) | |||
16 | case TRACE_BRANCH: | 17 | case TRACE_BRANCH: |
17 | case TRACE_GRAPH_ENT: | 18 | case TRACE_GRAPH_ENT: |
18 | case TRACE_GRAPH_RET: | 19 | case TRACE_GRAPH_RET: |
19 | case TRACE_HW_BRANCHES: | ||
20 | case TRACE_KSYM: | 20 | case TRACE_KSYM: |
21 | return 1; | 21 | return 1; |
22 | } | 22 | } |
@@ -29,7 +29,7 @@ static int trace_test_buffer_cpu(struct trace_array *tr, int cpu) | |||
29 | struct trace_entry *entry; | 29 | struct trace_entry *entry; |
30 | unsigned int loops = 0; | 30 | unsigned int loops = 0; |
31 | 31 | ||
32 | while ((event = ring_buffer_consume(tr->buffer, cpu, NULL))) { | 32 | while ((event = ring_buffer_consume(tr->buffer, cpu, NULL, NULL))) { |
33 | entry = ring_buffer_event_data(event); | 33 | entry = ring_buffer_event_data(event); |
34 | 34 | ||
35 | /* | 35 | /* |
@@ -255,7 +255,8 @@ trace_selftest_startup_function(struct tracer *trace, struct trace_array *tr) | |||
255 | /* Maximum number of functions to trace before diagnosing a hang */ | 255 | /* Maximum number of functions to trace before diagnosing a hang */ |
256 | #define GRAPH_MAX_FUNC_TEST 100000000 | 256 | #define GRAPH_MAX_FUNC_TEST 100000000 |
257 | 257 | ||
258 | static void __ftrace_dump(bool disable_tracing); | 258 | static void |
259 | __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode); | ||
259 | static unsigned int graph_hang_thresh; | 260 | static unsigned int graph_hang_thresh; |
260 | 261 | ||
261 | /* Wrap the real function entry probe to avoid possible hanging */ | 262 | /* Wrap the real function entry probe to avoid possible hanging */ |
@@ -266,7 +267,7 @@ static int trace_graph_entry_watchdog(struct ftrace_graph_ent *trace) | |||
266 | ftrace_graph_stop(); | 267 | ftrace_graph_stop(); |
267 | printk(KERN_WARNING "BUG: Function graph tracer hang!\n"); | 268 | printk(KERN_WARNING "BUG: Function graph tracer hang!\n"); |
268 | if (ftrace_dump_on_oops) | 269 | if (ftrace_dump_on_oops) |
269 | __ftrace_dump(false); | 270 | __ftrace_dump(false, DUMP_ALL); |
270 | return 0; | 271 | return 0; |
271 | } | 272 | } |
272 | 273 | ||
@@ -754,62 +755,6 @@ trace_selftest_startup_branch(struct tracer *trace, struct trace_array *tr) | |||
754 | } | 755 | } |
755 | #endif /* CONFIG_BRANCH_TRACER */ | 756 | #endif /* CONFIG_BRANCH_TRACER */ |
756 | 757 | ||
757 | #ifdef CONFIG_HW_BRANCH_TRACER | ||
758 | int | ||
759 | trace_selftest_startup_hw_branches(struct tracer *trace, | ||
760 | struct trace_array *tr) | ||
761 | { | ||
762 | struct trace_iterator *iter; | ||
763 | struct tracer tracer; | ||
764 | unsigned long count; | ||
765 | int ret; | ||
766 | |||
767 | if (!trace->open) { | ||
768 | printk(KERN_CONT "missing open function..."); | ||
769 | return -1; | ||
770 | } | ||
771 | |||
772 | ret = tracer_init(trace, tr); | ||
773 | if (ret) { | ||
774 | warn_failed_init_tracer(trace, ret); | ||
775 | return ret; | ||
776 | } | ||
777 | |||
778 | /* | ||
779 | * The hw-branch tracer needs to collect the trace from the various | ||
780 | * cpu trace buffers - before tracing is stopped. | ||
781 | */ | ||
782 | iter = kzalloc(sizeof(*iter), GFP_KERNEL); | ||
783 | if (!iter) | ||
784 | return -ENOMEM; | ||
785 | |||
786 | memcpy(&tracer, trace, sizeof(tracer)); | ||
787 | |||
788 | iter->trace = &tracer; | ||
789 | iter->tr = tr; | ||
790 | iter->pos = -1; | ||
791 | mutex_init(&iter->mutex); | ||
792 | |||
793 | trace->open(iter); | ||
794 | |||
795 | mutex_destroy(&iter->mutex); | ||
796 | kfree(iter); | ||
797 | |||
798 | tracing_stop(); | ||
799 | |||
800 | ret = trace_test_buffer(tr, &count); | ||
801 | trace->reset(tr); | ||
802 | tracing_start(); | ||
803 | |||
804 | if (!ret && !count) { | ||
805 | printk(KERN_CONT "no entries found.."); | ||
806 | ret = -1; | ||
807 | } | ||
808 | |||
809 | return ret; | ||
810 | } | ||
811 | #endif /* CONFIG_HW_BRANCH_TRACER */ | ||
812 | |||
813 | #ifdef CONFIG_KSYM_TRACER | 758 | #ifdef CONFIG_KSYM_TRACER |
814 | static int ksym_selftest_dummy; | 759 | static int ksym_selftest_dummy; |
815 | 760 | ||