diff options
Diffstat (limited to 'kernel/trace/trace_selftest.c')
-rw-r--r-- | kernel/trace/trace_selftest.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index 51c819c12c29..55e2cf66967b 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c | |||
@@ -21,13 +21,13 @@ static inline int trace_valid_entry(struct trace_entry *entry) | |||
21 | return 0; | 21 | return 0; |
22 | } | 22 | } |
23 | 23 | ||
24 | static int trace_test_buffer_cpu(struct trace_array *tr, int cpu) | 24 | static int trace_test_buffer_cpu(struct trace_buffer *buf, int cpu) |
25 | { | 25 | { |
26 | struct ring_buffer_event *event; | 26 | struct ring_buffer_event *event; |
27 | struct trace_entry *entry; | 27 | struct trace_entry *entry; |
28 | unsigned int loops = 0; | 28 | unsigned int loops = 0; |
29 | 29 | ||
30 | while ((event = ring_buffer_consume(tr->buffer, cpu, NULL, NULL))) { | 30 | while ((event = ring_buffer_consume(buf->buffer, cpu, NULL, NULL))) { |
31 | entry = ring_buffer_event_data(event); | 31 | entry = ring_buffer_event_data(event); |
32 | 32 | ||
33 | /* | 33 | /* |
@@ -58,7 +58,7 @@ static int trace_test_buffer_cpu(struct trace_array *tr, int cpu) | |||
58 | * Test the trace buffer to see if all the elements | 58 | * Test the trace buffer to see if all the elements |
59 | * are still sane. | 59 | * are still sane. |
60 | */ | 60 | */ |
61 | static int trace_test_buffer(struct trace_array *tr, unsigned long *count) | 61 | static int trace_test_buffer(struct trace_buffer *buf, unsigned long *count) |
62 | { | 62 | { |
63 | unsigned long flags, cnt = 0; | 63 | unsigned long flags, cnt = 0; |
64 | int cpu, ret = 0; | 64 | int cpu, ret = 0; |
@@ -67,7 +67,7 @@ static int trace_test_buffer(struct trace_array *tr, unsigned long *count) | |||
67 | local_irq_save(flags); | 67 | local_irq_save(flags); |
68 | arch_spin_lock(&ftrace_max_lock); | 68 | arch_spin_lock(&ftrace_max_lock); |
69 | 69 | ||
70 | cnt = ring_buffer_entries(tr->buffer); | 70 | cnt = ring_buffer_entries(buf->buffer); |
71 | 71 | ||
72 | /* | 72 | /* |
73 | * The trace_test_buffer_cpu runs a while loop to consume all data. | 73 | * The trace_test_buffer_cpu runs a while loop to consume all data. |
@@ -78,7 +78,7 @@ static int trace_test_buffer(struct trace_array *tr, unsigned long *count) | |||
78 | */ | 78 | */ |
79 | tracing_off(); | 79 | tracing_off(); |
80 | for_each_possible_cpu(cpu) { | 80 | for_each_possible_cpu(cpu) { |
81 | ret = trace_test_buffer_cpu(tr, cpu); | 81 | ret = trace_test_buffer_cpu(buf, cpu); |
82 | if (ret) | 82 | if (ret) |
83 | break; | 83 | break; |
84 | } | 84 | } |
@@ -355,7 +355,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, | |||
355 | msleep(100); | 355 | msleep(100); |
356 | 356 | ||
357 | /* we should have nothing in the buffer */ | 357 | /* we should have nothing in the buffer */ |
358 | ret = trace_test_buffer(tr, &count); | 358 | ret = trace_test_buffer(&tr->trace_buffer, &count); |
359 | if (ret) | 359 | if (ret) |
360 | goto out; | 360 | goto out; |
361 | 361 | ||
@@ -376,7 +376,7 @@ int trace_selftest_startup_dynamic_tracing(struct tracer *trace, | |||
376 | ftrace_enabled = 0; | 376 | ftrace_enabled = 0; |
377 | 377 | ||
378 | /* check the trace buffer */ | 378 | /* check the trace buffer */ |
379 | ret = trace_test_buffer(tr, &count); | 379 | ret = trace_test_buffer(&tr->trace_buffer, &count); |
380 | tracing_start(); | 380 | tracing_start(); |
381 | 381 | ||
382 | /* we should only have one item */ | 382 | /* we should only have one item */ |
@@ -666,7 +666,7 @@ trace_selftest_startup_function(struct tracer *trace, struct trace_array *tr) | |||
666 | ftrace_enabled = 0; | 666 | ftrace_enabled = 0; |
667 | 667 | ||
668 | /* check the trace buffer */ | 668 | /* check the trace buffer */ |
669 | ret = trace_test_buffer(tr, &count); | 669 | ret = trace_test_buffer(&tr->trace_buffer, &count); |
670 | trace->reset(tr); | 670 | trace->reset(tr); |
671 | tracing_start(); | 671 | tracing_start(); |
672 | 672 | ||
@@ -703,8 +703,6 @@ trace_selftest_startup_function(struct tracer *trace, struct trace_array *tr) | |||
703 | /* Maximum number of functions to trace before diagnosing a hang */ | 703 | /* Maximum number of functions to trace before diagnosing a hang */ |
704 | #define GRAPH_MAX_FUNC_TEST 100000000 | 704 | #define GRAPH_MAX_FUNC_TEST 100000000 |
705 | 705 | ||
706 | static void | ||
707 | __ftrace_dump(bool disable_tracing, enum ftrace_dump_mode oops_dump_mode); | ||
708 | static unsigned int graph_hang_thresh; | 706 | static unsigned int graph_hang_thresh; |
709 | 707 | ||
710 | /* Wrap the real function entry probe to avoid possible hanging */ | 708 | /* Wrap the real function entry probe to avoid possible hanging */ |
@@ -714,8 +712,11 @@ static int trace_graph_entry_watchdog(struct ftrace_graph_ent *trace) | |||
714 | if (unlikely(++graph_hang_thresh > GRAPH_MAX_FUNC_TEST)) { | 712 | if (unlikely(++graph_hang_thresh > GRAPH_MAX_FUNC_TEST)) { |
715 | ftrace_graph_stop(); | 713 | ftrace_graph_stop(); |
716 | printk(KERN_WARNING "BUG: Function graph tracer hang!\n"); | 714 | printk(KERN_WARNING "BUG: Function graph tracer hang!\n"); |
717 | if (ftrace_dump_on_oops) | 715 | if (ftrace_dump_on_oops) { |
718 | __ftrace_dump(false, DUMP_ALL); | 716 | ftrace_dump(DUMP_ALL); |
717 | /* ftrace_dump() disables tracing */ | ||
718 | tracing_on(); | ||
719 | } | ||
719 | return 0; | 720 | return 0; |
720 | } | 721 | } |
721 | 722 | ||
@@ -737,7 +738,7 @@ trace_selftest_startup_function_graph(struct tracer *trace, | |||
737 | * Simulate the init() callback but we attach a watchdog callback | 738 | * Simulate the init() callback but we attach a watchdog callback |
738 | * to detect and recover from possible hangs | 739 | * to detect and recover from possible hangs |
739 | */ | 740 | */ |
740 | tracing_reset_online_cpus(tr); | 741 | tracing_reset_online_cpus(&tr->trace_buffer); |
741 | set_graph_array(tr); | 742 | set_graph_array(tr); |
742 | ret = register_ftrace_graph(&trace_graph_return, | 743 | ret = register_ftrace_graph(&trace_graph_return, |
743 | &trace_graph_entry_watchdog); | 744 | &trace_graph_entry_watchdog); |
@@ -760,7 +761,7 @@ trace_selftest_startup_function_graph(struct tracer *trace, | |||
760 | tracing_stop(); | 761 | tracing_stop(); |
761 | 762 | ||
762 | /* check the trace buffer */ | 763 | /* check the trace buffer */ |
763 | ret = trace_test_buffer(tr, &count); | 764 | ret = trace_test_buffer(&tr->trace_buffer, &count); |
764 | 765 | ||
765 | trace->reset(tr); | 766 | trace->reset(tr); |
766 | tracing_start(); | 767 | tracing_start(); |
@@ -815,9 +816,9 @@ trace_selftest_startup_irqsoff(struct tracer *trace, struct trace_array *tr) | |||
815 | /* stop the tracing. */ | 816 | /* stop the tracing. */ |
816 | tracing_stop(); | 817 | tracing_stop(); |
817 | /* check both trace buffers */ | 818 | /* check both trace buffers */ |
818 | ret = trace_test_buffer(tr, NULL); | 819 | ret = trace_test_buffer(&tr->trace_buffer, NULL); |
819 | if (!ret) | 820 | if (!ret) |
820 | ret = trace_test_buffer(&max_tr, &count); | 821 | ret = trace_test_buffer(&tr->max_buffer, &count); |
821 | trace->reset(tr); | 822 | trace->reset(tr); |
822 | tracing_start(); | 823 | tracing_start(); |
823 | 824 | ||
@@ -877,9 +878,9 @@ trace_selftest_startup_preemptoff(struct tracer *trace, struct trace_array *tr) | |||
877 | /* stop the tracing. */ | 878 | /* stop the tracing. */ |
878 | tracing_stop(); | 879 | tracing_stop(); |
879 | /* check both trace buffers */ | 880 | /* check both trace buffers */ |
880 | ret = trace_test_buffer(tr, NULL); | 881 | ret = trace_test_buffer(&tr->trace_buffer, NULL); |
881 | if (!ret) | 882 | if (!ret) |
882 | ret = trace_test_buffer(&max_tr, &count); | 883 | ret = trace_test_buffer(&tr->max_buffer, &count); |
883 | trace->reset(tr); | 884 | trace->reset(tr); |
884 | tracing_start(); | 885 | tracing_start(); |
885 | 886 | ||
@@ -943,11 +944,11 @@ trace_selftest_startup_preemptirqsoff(struct tracer *trace, struct trace_array * | |||
943 | /* stop the tracing. */ | 944 | /* stop the tracing. */ |
944 | tracing_stop(); | 945 | tracing_stop(); |
945 | /* check both trace buffers */ | 946 | /* check both trace buffers */ |
946 | ret = trace_test_buffer(tr, NULL); | 947 | ret = trace_test_buffer(&tr->trace_buffer, NULL); |
947 | if (ret) | 948 | if (ret) |
948 | goto out; | 949 | goto out; |
949 | 950 | ||
950 | ret = trace_test_buffer(&max_tr, &count); | 951 | ret = trace_test_buffer(&tr->max_buffer, &count); |
951 | if (ret) | 952 | if (ret) |
952 | goto out; | 953 | goto out; |
953 | 954 | ||
@@ -973,11 +974,11 @@ trace_selftest_startup_preemptirqsoff(struct tracer *trace, struct trace_array * | |||
973 | /* stop the tracing. */ | 974 | /* stop the tracing. */ |
974 | tracing_stop(); | 975 | tracing_stop(); |
975 | /* check both trace buffers */ | 976 | /* check both trace buffers */ |
976 | ret = trace_test_buffer(tr, NULL); | 977 | ret = trace_test_buffer(&tr->trace_buffer, NULL); |
977 | if (ret) | 978 | if (ret) |
978 | goto out; | 979 | goto out; |
979 | 980 | ||
980 | ret = trace_test_buffer(&max_tr, &count); | 981 | ret = trace_test_buffer(&tr->max_buffer, &count); |
981 | 982 | ||
982 | if (!ret && !count) { | 983 | if (!ret && !count) { |
983 | printk(KERN_CONT ".. no entries found .."); | 984 | printk(KERN_CONT ".. no entries found .."); |
@@ -1084,10 +1085,10 @@ trace_selftest_startup_wakeup(struct tracer *trace, struct trace_array *tr) | |||
1084 | /* stop the tracing. */ | 1085 | /* stop the tracing. */ |
1085 | tracing_stop(); | 1086 | tracing_stop(); |
1086 | /* check both trace buffers */ | 1087 | /* check both trace buffers */ |
1087 | ret = trace_test_buffer(tr, NULL); | 1088 | ret = trace_test_buffer(&tr->trace_buffer, NULL); |
1088 | printk("ret = %d\n", ret); | 1089 | printk("ret = %d\n", ret); |
1089 | if (!ret) | 1090 | if (!ret) |
1090 | ret = trace_test_buffer(&max_tr, &count); | 1091 | ret = trace_test_buffer(&tr->max_buffer, &count); |
1091 | 1092 | ||
1092 | 1093 | ||
1093 | trace->reset(tr); | 1094 | trace->reset(tr); |
@@ -1126,7 +1127,7 @@ trace_selftest_startup_sched_switch(struct tracer *trace, struct trace_array *tr | |||
1126 | /* stop the tracing. */ | 1127 | /* stop the tracing. */ |
1127 | tracing_stop(); | 1128 | tracing_stop(); |
1128 | /* check the trace buffer */ | 1129 | /* check the trace buffer */ |
1129 | ret = trace_test_buffer(tr, &count); | 1130 | ret = trace_test_buffer(&tr->trace_buffer, &count); |
1130 | trace->reset(tr); | 1131 | trace->reset(tr); |
1131 | tracing_start(); | 1132 | tracing_start(); |
1132 | 1133 | ||