Merge branch 'work.splice' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / kernel / trace / trace_selftest.c
1 /* Include in trace.c */
2
3 #include <uapi/linux/sched/types.h>
4 #include <linux/stringify.h>
5 #include <linux/kthread.h>
6 #include <linux/delay.h>
7 #include <linux/slab.h>
8
9 static inline int trace_valid_entry(struct trace_entry *entry)
10 {
11         switch (entry->type) {
12         case TRACE_FN:
13         case TRACE_CTX:
14         case TRACE_WAKE:
15         case TRACE_STACK:
16         case TRACE_PRINT:
17         case TRACE_BRANCH:
18         case TRACE_GRAPH_ENT:
19         case TRACE_GRAPH_RET:
20                 return 1;
21         }
22         return 0;
23 }
24
25 static int trace_test_buffer_cpu(struct trace_buffer *buf, int cpu)
26 {
27         struct ring_buffer_event *event;
28         struct trace_entry *entry;
29         unsigned int loops = 0;
30
31         while ((event = ring_buffer_consume(buf->buffer, cpu, NULL, NULL))) {
32                 entry = ring_buffer_event_data(event);
33
34                 /*
35                  * The ring buffer is a size of trace_buf_size, if
36                  * we loop more than the size, there's something wrong
37                  * with the ring buffer.
38                  */
39                 if (loops++ > trace_buf_size) {
40                         printk(KERN_CONT ".. bad ring buffer ");
41                         goto failed;
42                 }
43                 if (!trace_valid_entry(entry)) {
44                         printk(KERN_CONT ".. invalid entry %d ",
45                                 entry->type);
46                         goto failed;
47                 }
48         }
49         return 0;
50
51  failed:
52         /* disable tracing */
53         tracing_disabled = 1;
54         printk(KERN_CONT ".. corrupted trace buffer .. ");
55         return -1;
56 }
57
58 /*
59  * Test the trace buffer to see if all the elements
60  * are still sane.
61  */
62 static int trace_test_buffer(struct trace_buffer *buf, unsigned long *count)
63 {
64         unsigned long flags, cnt = 0;
65         int cpu, ret = 0;
66
67         /* Don't allow flipping of max traces now */
68         local_irq_save(flags);
69         arch_spin_lock(&buf->tr->max_lock);
70
71         cnt = ring_buffer_entries(buf->buffer);
72
73         /*
74          * The trace_test_buffer_cpu runs a while loop to consume all data.
75          * If the calling tracer is broken, and is constantly filling
76          * the buffer, this will run forever, and hard lock the box.
77          * We disable the ring buffer while we do this test to prevent
78          * a hard lock up.
79          */
80         tracing_off();
81         for_each_possible_cpu(cpu) {
82                 ret = trace_test_buffer_cpu(buf, cpu);
83                 if (ret)
84                         break;
85         }
86         tracing_on();
87         arch_spin_unlock(&buf->tr->max_lock);
88         local_irq_restore(flags);
89
90         if (count)
91                 *count = cnt;
92
93         return ret;
94 }
95
96 static inline void warn_failed_init_tracer(struct tracer *trace, int init_ret)
97 {
98         printk(KERN_WARNING "Failed to init %s tracer, init returned %d\n",
99                 trace->name, init_ret);
100 }
101 #ifdef CONFIG_FUNCTION_TRACER
102
103 #ifdef CONFIG_DYNAMIC_FTRACE
104
105 static int trace_selftest_test_probe1_cnt;
106 static void trace_selftest_test_probe1_func(unsigned long ip,
107                                             unsigned long pip,
108                                             struct ftrace_ops *op,
109                                             struct pt_regs *pt_regs)
110 {
111         trace_selftest_test_probe1_cnt++;
112 }
113
114 static int trace_selftest_test_probe2_cnt;
115 static void trace_selftest_test_probe2_func(unsigned long ip,
116                                             unsigned long pip,
117                                             struct ftrace_ops *op,
118                                             struct pt_regs *pt_regs)
119 {
120         trace_selftest_test_probe2_cnt++;
121 }
122
123 static int trace_selftest_test_probe3_cnt;
124 static void trace_selftest_test_probe3_func(unsigned long ip,
125                                             unsigned long pip,
126                                             struct ftrace_ops *op,
127                                             struct pt_regs *pt_regs)
128 {
129         trace_selftest_test_probe3_cnt++;
130 }
131
132 static int trace_selftest_test_global_cnt;
133 static void trace_selftest_test_global_func(unsigned long ip,
134                                             unsigned long pip,
135                                             struct ftrace_ops *op,
136                                             struct pt_regs *pt_regs)
137 {
138         trace_selftest_test_global_cnt++;
139 }
140
141 static int trace_selftest_test_dyn_cnt;
142 static void trace_selftest_test_dyn_func(unsigned long ip,
143                                          unsigned long pip,
144                                          struct ftrace_ops *op,
145                                          struct pt_regs *pt_regs)
146 {
147         trace_selftest_test_dyn_cnt++;
148 }
149
150 static struct ftrace_ops test_probe1 = {
151         .func                   = trace_selftest_test_probe1_func,
152         .flags                  = FTRACE_OPS_FL_RECURSION_SAFE,
153 };
154
155 static struct ftrace_ops test_probe2 = {
156         .func                   = trace_selftest_test_probe2_func,
157         .flags                  = FTRACE_OPS_FL_RECURSION_SAFE,
158 };
159
160 static struct ftrace_ops test_probe3 = {
161         .func                   = trace_selftest_test_probe3_func,
162         .flags                  = FTRACE_OPS_FL_RECURSION_SAFE,
163 };
164
165 static void print_counts(void)
166 {
167         printk("(%d %d %d %d %d) ",
168                trace_selftest_test_probe1_cnt,
169                trace_selftest_test_probe2_cnt,
170                trace_selftest_test_probe3_cnt,
171                trace_selftest_test_global_cnt,
172                trace_selftest_test_dyn_cnt);
173 }
174
175 static void reset_counts(void)
176 {
177         trace_selftest_test_probe1_cnt = 0;
178         trace_selftest_test_probe2_cnt = 0;
179         trace_selftest_test_probe3_cnt = 0;
180         trace_selftest_test_global_cnt = 0;
181         trace_selftest_test_dyn_cnt = 0;
182 }
183
184 static int trace_selftest_ops(struct trace_array *tr, int cnt)
185 {
186         int save_ftrace_enabled = ftrace_enabled;
187         struct ftrace_ops *dyn_ops;
188         char *func1_name;
189         char *func2_name;
190         int len1;
191         int len2;
192         int ret = -1;
193
194         printk(KERN_CONT "PASSED\n");
195         pr_info("Testing dynamic ftrace ops #%d: ", cnt);
196
197         ftrace_enabled = 1;
198         reset_counts();
199
200         /* Handle PPC64 '.' name */
201         func1_name = "*" __stringify(DYN_FTRACE_TEST_NAME);
202         func2_name = "*" __stringify(DYN_FTRACE_TEST_NAME2);
203         len1 = strlen(func1_name);
204         len2 = strlen(func2_name);
205
206         /*
207          * Probe 1 will trace function 1.
208          * Probe 2 will trace function 2.
209          * Probe 3 will trace functions 1 and 2.
210          */
211         ftrace_set_filter(&test_probe1, func1_name, len1, 1);
212         ftrace_set_filter(&test_probe2, func2_name, len2, 1);
213         ftrace_set_filter(&test_probe3, func1_name, len1, 1);
214         ftrace_set_filter(&test_probe3, func2_name, len2, 0);
215
216         register_ftrace_function(&test_probe1);
217         register_ftrace_function(&test_probe2);
218         register_ftrace_function(&test_probe3);
219         /* First time we are running with main function */
220         if (cnt > 1) {
221                 ftrace_init_array_ops(tr, trace_selftest_test_global_func);
222                 register_ftrace_function(tr->ops);
223         }
224
225         DYN_FTRACE_TEST_NAME();
226
227         print_counts();
228
229         if (trace_selftest_test_probe1_cnt != 1)
230                 goto out;
231         if (trace_selftest_test_probe2_cnt != 0)
232                 goto out;
233         if (trace_selftest_test_probe3_cnt != 1)
234                 goto out;
235         if (cnt > 1) {
236                 if (trace_selftest_test_global_cnt == 0)
237                         goto out;
238         }
239
240         DYN_FTRACE_TEST_NAME2();
241
242         print_counts();
243
244         if (trace_selftest_test_probe1_cnt != 1)
245                 goto out;
246         if (trace_selftest_test_probe2_cnt != 1)
247                 goto out;
248         if (trace_selftest_test_probe3_cnt != 2)
249                 goto out;
250
251         /* Add a dynamic probe */
252         dyn_ops = kzalloc(sizeof(*dyn_ops), GFP_KERNEL);
253         if (!dyn_ops) {
254                 printk("MEMORY ERROR ");
255                 goto out;
256         }
257
258         dyn_ops->func = trace_selftest_test_dyn_func;
259
260         register_ftrace_function(dyn_ops);
261
262         trace_selftest_test_global_cnt = 0;
263
264         DYN_FTRACE_TEST_NAME();
265
266         print_counts();
267
268         if (trace_selftest_test_probe1_cnt != 2)
269                 goto out_free;
270         if (trace_selftest_test_probe2_cnt != 1)
271                 goto out_free;
272         if (trace_selftest_test_probe3_cnt != 3)
273                 goto out_free;
274         if (cnt > 1) {
275                 if (trace_selftest_test_global_cnt == 0)
276                         goto out;
277         }
278         if (trace_selftest_test_dyn_cnt == 0)
279                 goto out_free;
280
281         DYN_FTRACE_TEST_NAME2();
282
283         print_counts();
284
285         if (trace_selftest_test_probe1_cnt != 2)
286                 goto out_free;
287         if (trace_selftest_test_probe2_cnt != 2)
288                 goto out_free;
289         if (trace_selftest_test_probe3_cnt != 4)
290                 goto out_free;
291
292         ret = 0;
293  out_free:
294         unregister_ftrace_function(dyn_ops);
295         kfree(dyn_ops);
296
297  out:
298         /* Purposely unregister in the same order */
299         unregister_ftrace_function(&test_probe1);
300         unregister_ftrace_function(&test_probe2);
301         unregister_ftrace_function(&test_probe3);
302         if (cnt > 1)
303                 unregister_ftrace_function(tr->ops);
304         ftrace_reset_array_ops(tr);
305
306         /* Make sure everything is off */
307         reset_counts();
308         DYN_FTRACE_TEST_NAME();
309         DYN_FTRACE_TEST_NAME();
310
311         if (trace_selftest_test_probe1_cnt ||
312             trace_selftest_test_probe2_cnt ||
313             trace_selftest_test_probe3_cnt ||
314             trace_selftest_test_global_cnt ||
315             trace_selftest_test_dyn_cnt)
316                 ret = -1;
317
318         ftrace_enabled = save_ftrace_enabled;
319
320         return ret;
321 }
322
323 /* Test dynamic code modification and ftrace filters */
324 static int trace_selftest_startup_dynamic_tracing(struct tracer *trace,
325                                                   struct trace_array *tr,
326                                                   int (*func)(void))
327 {
328         int save_ftrace_enabled = ftrace_enabled;
329         unsigned long count;
330         char *func_name;
331         int ret;
332
333         /* The ftrace test PASSED */
334         printk(KERN_CONT "PASSED\n");
335         pr_info("Testing dynamic ftrace: ");
336
337         /* enable tracing, and record the filter function */
338         ftrace_enabled = 1;
339
340         /* passed in by parameter to fool gcc from optimizing */
341         func();
342
343         /*
344          * Some archs *cough*PowerPC*cough* add characters to the
345          * start of the function names. We simply put a '*' to
346          * accommodate them.
347          */
348         func_name = "*" __stringify(DYN_FTRACE_TEST_NAME);
349
350         /* filter only on our function */
351         ftrace_set_global_filter(func_name, strlen(func_name), 1);
352
353         /* enable tracing */
354         ret = tracer_init(trace, tr);
355         if (ret) {
356                 warn_failed_init_tracer(trace, ret);
357                 goto out;
358         }
359
360         /* Sleep for a 1/10 of a second */
361         msleep(100);
362
363         /* we should have nothing in the buffer */
364         ret = trace_test_buffer(&tr->trace_buffer, &count);
365         if (ret)
366                 goto out;
367
368         if (count) {
369                 ret = -1;
370                 printk(KERN_CONT ".. filter did not filter .. ");
371                 goto out;
372         }
373
374         /* call our function again */
375         func();
376
377         /* sleep again */
378         msleep(100);
379
380         /* stop the tracing. */
381         tracing_stop();
382         ftrace_enabled = 0;
383
384         /* check the trace buffer */
385         ret = trace_test_buffer(&tr->trace_buffer, &count);
386
387         ftrace_enabled = 1;
388         tracing_start();
389
390         /* we should only have one item */
391         if (!ret && count != 1) {
392                 trace->reset(tr);
393                 printk(KERN_CONT ".. filter failed count=%ld ..", count);
394                 ret = -1;
395                 goto out;
396         }
397
398         /* Test the ops with global tracing running */
399         ret = trace_selftest_ops(tr, 1);
400         trace->reset(tr);
401
402  out:
403         ftrace_enabled = save_ftrace_enabled;
404
405         /* Enable tracing on all functions again */
406         ftrace_set_global_filter(NULL, 0, 1);
407
408         /* Test the ops with global tracing off */
409         if (!ret)
410                 ret = trace_selftest_ops(tr, 2);
411
412         return ret;
413 }
414
415 static int trace_selftest_recursion_cnt;
416 static void trace_selftest_test_recursion_func(unsigned long ip,
417                                                unsigned long pip,
418                                                struct ftrace_ops *op,
419                                                struct pt_regs *pt_regs)
420 {
421         /*
422          * This function is registered without the recursion safe flag.
423          * The ftrace infrastructure should provide the recursion
424          * protection. If not, this will crash the kernel!
425          */
426         if (trace_selftest_recursion_cnt++ > 10)
427                 return;
428         DYN_FTRACE_TEST_NAME();
429 }
430
431 static void trace_selftest_test_recursion_safe_func(unsigned long ip,
432                                                     unsigned long pip,
433                                                     struct ftrace_ops *op,
434                                                     struct pt_regs *pt_regs)
435 {
436         /*
437          * We said we would provide our own recursion. By calling
438          * this function again, we should recurse back into this function
439          * and count again. But this only happens if the arch supports
440          * all of ftrace features and nothing else is using the function
441          * tracing utility.
442          */
443         if (trace_selftest_recursion_cnt++)
444                 return;
445         DYN_FTRACE_TEST_NAME();
446 }
447
448 static struct ftrace_ops test_rec_probe = {
449         .func                   = trace_selftest_test_recursion_func,
450 };
451
452 static struct ftrace_ops test_recsafe_probe = {
453         .func                   = trace_selftest_test_recursion_safe_func,
454         .flags                  = FTRACE_OPS_FL_RECURSION_SAFE,
455 };
456
457 static int
458 trace_selftest_function_recursion(void)
459 {
460         int save_ftrace_enabled = ftrace_enabled;
461         char *func_name;
462         int len;
463         int ret;
464
465         /* The previous test PASSED */
466         pr_cont("PASSED\n");
467         pr_info("Testing ftrace recursion: ");
468
469
470         /* enable tracing, and record the filter function */
471         ftrace_enabled = 1;
472
473         /* Handle PPC64 '.' name */
474         func_name = "*" __stringify(DYN_FTRACE_TEST_NAME);
475         len = strlen(func_name);
476
477         ret = ftrace_set_filter(&test_rec_probe, func_name, len, 1);
478         if (ret) {
479                 pr_cont("*Could not set filter* ");
480                 goto out;
481         }
482
483         ret = register_ftrace_function(&test_rec_probe);
484         if (ret) {
485                 pr_cont("*could not register callback* ");
486                 goto out;
487         }
488
489         DYN_FTRACE_TEST_NAME();
490
491         unregister_ftrace_function(&test_rec_probe);
492
493         ret = -1;
494         if (trace_selftest_recursion_cnt != 1) {
495                 pr_cont("*callback not called once (%d)* ",
496                         trace_selftest_recursion_cnt);
497                 goto out;
498         }
499
500         trace_selftest_recursion_cnt = 1;
501
502         pr_cont("PASSED\n");
503         pr_info("Testing ftrace recursion safe: ");
504
505         ret = ftrace_set_filter(&test_recsafe_probe, func_name, len, 1);
506         if (ret) {
507                 pr_cont("*Could not set filter* ");
508                 goto out;
509         }
510
511         ret = register_ftrace_function(&test_recsafe_probe);
512         if (ret) {
513                 pr_cont("*could not register callback* ");
514                 goto out;
515         }
516
517         DYN_FTRACE_TEST_NAME();
518
519         unregister_ftrace_function(&test_recsafe_probe);
520
521         ret = -1;
522         if (trace_selftest_recursion_cnt != 2) {
523                 pr_cont("*callback not called expected 2 times (%d)* ",
524                         trace_selftest_recursion_cnt);
525                 goto out;
526         }
527
528         ret = 0;
529 out:
530         ftrace_enabled = save_ftrace_enabled;
531
532         return ret;
533 }
534 #else
535 # define trace_selftest_startup_dynamic_tracing(trace, tr, func) ({ 0; })
536 # define trace_selftest_function_recursion() ({ 0; })
537 #endif /* CONFIG_DYNAMIC_FTRACE */
538
539 static enum {
540         TRACE_SELFTEST_REGS_START,
541         TRACE_SELFTEST_REGS_FOUND,
542         TRACE_SELFTEST_REGS_NOT_FOUND,
543 } trace_selftest_regs_stat;
544
545 static void trace_selftest_test_regs_func(unsigned long ip,
546                                           unsigned long pip,
547                                           struct ftrace_ops *op,
548                                           struct pt_regs *pt_regs)
549 {
550         if (pt_regs)
551                 trace_selftest_regs_stat = TRACE_SELFTEST_REGS_FOUND;
552         else
553                 trace_selftest_regs_stat = TRACE_SELFTEST_REGS_NOT_FOUND;
554 }
555
556 static struct ftrace_ops test_regs_probe = {
557         .func           = trace_selftest_test_regs_func,
558         .flags          = FTRACE_OPS_FL_RECURSION_SAFE | FTRACE_OPS_FL_SAVE_REGS,
559 };
560
561 static int
562 trace_selftest_function_regs(void)
563 {
564         int save_ftrace_enabled = ftrace_enabled;
565         char *func_name;
566         int len;
567         int ret;
568         int supported = 0;
569
570 #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
571         supported = 1;
572 #endif
573
574         /* The previous test PASSED */
575         pr_cont("PASSED\n");
576         pr_info("Testing ftrace regs%s: ",
577                 !supported ? "(no arch support)" : "");
578
579         /* enable tracing, and record the filter function */
580         ftrace_enabled = 1;
581
582         /* Handle PPC64 '.' name */
583         func_name = "*" __stringify(DYN_FTRACE_TEST_NAME);
584         len = strlen(func_name);
585
586         ret = ftrace_set_filter(&test_regs_probe, func_name, len, 1);
587         /*
588          * If DYNAMIC_FTRACE is not set, then we just trace all functions.
589          * This test really doesn't care.
590          */
591         if (ret && ret != -ENODEV) {
592                 pr_cont("*Could not set filter* ");
593                 goto out;
594         }
595
596         ret = register_ftrace_function(&test_regs_probe);
597         /*
598          * Now if the arch does not support passing regs, then this should
599          * have failed.
600          */
601         if (!supported) {
602                 if (!ret) {
603                         pr_cont("*registered save-regs without arch support* ");
604                         goto out;
605                 }
606                 test_regs_probe.flags |= FTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED;
607                 ret = register_ftrace_function(&test_regs_probe);
608         }
609         if (ret) {
610                 pr_cont("*could not register callback* ");
611                 goto out;
612         }
613
614
615         DYN_FTRACE_TEST_NAME();
616
617         unregister_ftrace_function(&test_regs_probe);
618
619         ret = -1;
620
621         switch (trace_selftest_regs_stat) {
622         case TRACE_SELFTEST_REGS_START:
623                 pr_cont("*callback never called* ");
624                 goto out;
625
626         case TRACE_SELFTEST_REGS_FOUND:
627                 if (supported)
628                         break;
629                 pr_cont("*callback received regs without arch support* ");
630                 goto out;
631
632         case TRACE_SELFTEST_REGS_NOT_FOUND:
633                 if (!supported)
634                         break;
635                 pr_cont("*callback received NULL regs* ");
636                 goto out;
637         }
638
639         ret = 0;
640 out:
641         ftrace_enabled = save_ftrace_enabled;
642
643         return ret;
644 }
645
646 /*
647  * Simple verification test of ftrace function tracer.
648  * Enable ftrace, sleep 1/10 second, and then read the trace
649  * buffer to see if all is in order.
650  */
651 __init int
652 trace_selftest_startup_function(struct tracer *trace, struct trace_array *tr)
653 {
654         int save_ftrace_enabled = ftrace_enabled;
655         unsigned long count;
656         int ret;
657
658 #ifdef CONFIG_DYNAMIC_FTRACE
659         if (ftrace_filter_param) {
660                 printk(KERN_CONT " ... kernel command line filter set: force PASS ... ");
661                 return 0;
662         }
663 #endif
664
665         /* make sure msleep has been recorded */
666         msleep(1);
667
668         /* start the tracing */
669         ftrace_enabled = 1;
670
671         ret = tracer_init(trace, tr);
672         if (ret) {
673                 warn_failed_init_tracer(trace, ret);
674                 goto out;
675         }
676
677         /* Sleep for a 1/10 of a second */
678         msleep(100);
679         /* stop the tracing. */
680         tracing_stop();
681         ftrace_enabled = 0;
682
683         /* check the trace buffer */
684         ret = trace_test_buffer(&tr->trace_buffer, &count);
685
686         ftrace_enabled = 1;
687         trace->reset(tr);
688         tracing_start();
689
690         if (!ret && !count) {
691                 printk(KERN_CONT ".. no entries found ..");
692                 ret = -1;
693                 goto out;
694         }
695
696         ret = trace_selftest_startup_dynamic_tracing(trace, tr,
697                                                      DYN_FTRACE_TEST_NAME);
698         if (ret)
699                 goto out;
700
701         ret = trace_selftest_function_recursion();
702         if (ret)
703                 goto out;
704
705         ret = trace_selftest_function_regs();
706  out:
707         ftrace_enabled = save_ftrace_enabled;
708
709         /* kill ftrace totally if we failed */
710         if (ret)
711                 ftrace_kill();
712
713         return ret;
714 }
715 #endif /* CONFIG_FUNCTION_TRACER */
716
717
718 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
719
720 /* Maximum number of functions to trace before diagnosing a hang */
721 #define GRAPH_MAX_FUNC_TEST     100000000
722
723 static unsigned int graph_hang_thresh;
724
725 /* Wrap the real function entry probe to avoid possible hanging */
726 static int trace_graph_entry_watchdog(struct ftrace_graph_ent *trace)
727 {
728         /* This is harmlessly racy, we want to approximately detect a hang */
729         if (unlikely(++graph_hang_thresh > GRAPH_MAX_FUNC_TEST)) {
730                 ftrace_graph_stop();
731                 printk(KERN_WARNING "BUG: Function graph tracer hang!\n");
732                 if (ftrace_dump_on_oops) {
733                         ftrace_dump(DUMP_ALL);
734                         /* ftrace_dump() disables tracing */
735                         tracing_on();
736                 }
737                 return 0;
738         }
739
740         return trace_graph_entry(trace);
741 }
742
743 /*
744  * Pretty much the same than for the function tracer from which the selftest
745  * has been borrowed.
746  */
747 __init int
748 trace_selftest_startup_function_graph(struct tracer *trace,
749                                         struct trace_array *tr)
750 {
751         int ret;
752         unsigned long count;
753
754 #ifdef CONFIG_DYNAMIC_FTRACE
755         if (ftrace_filter_param) {
756                 printk(KERN_CONT " ... kernel command line filter set: force PASS ... ");
757                 return 0;
758         }
759 #endif
760
761         /*
762          * Simulate the init() callback but we attach a watchdog callback
763          * to detect and recover from possible hangs
764          */
765         tracing_reset_online_cpus(&tr->trace_buffer);
766         set_graph_array(tr);
767         ret = register_ftrace_graph(&trace_graph_return,
768                                     &trace_graph_entry_watchdog);
769         if (ret) {
770                 warn_failed_init_tracer(trace, ret);
771                 goto out;
772         }
773         tracing_start_cmdline_record();
774
775         /* Sleep for a 1/10 of a second */
776         msleep(100);
777
778         /* Have we just recovered from a hang? */
779         if (graph_hang_thresh > GRAPH_MAX_FUNC_TEST) {
780                 tracing_selftest_disabled = true;
781                 ret = -1;
782                 goto out;
783         }
784
785         tracing_stop();
786
787         /* check the trace buffer */
788         ret = trace_test_buffer(&tr->trace_buffer, &count);
789
790         trace->reset(tr);
791         tracing_start();
792
793         if (!ret && !count) {
794                 printk(KERN_CONT ".. no entries found ..");
795                 ret = -1;
796                 goto out;
797         }
798
799         /* Don't test dynamic tracing, the function tracer already did */
800
801 out:
802         /* Stop it if we failed */
803         if (ret)
804                 ftrace_graph_stop();
805
806         return ret;
807 }
808 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
809
810
811 #ifdef CONFIG_IRQSOFF_TRACER
812 int
813 trace_selftest_startup_irqsoff(struct tracer *trace, struct trace_array *tr)
814 {
815         unsigned long save_max = tr->max_latency;
816         unsigned long count;
817         int ret;
818
819         /* start the tracing */
820         ret = tracer_init(trace, tr);
821         if (ret) {
822                 warn_failed_init_tracer(trace, ret);
823                 return ret;
824         }
825
826         /* reset the max latency */
827         tr->max_latency = 0;
828         /* disable interrupts for a bit */
829         local_irq_disable();
830         udelay(100);
831         local_irq_enable();
832
833         /*
834          * Stop the tracer to avoid a warning subsequent
835          * to buffer flipping failure because tracing_stop()
836          * disables the tr and max buffers, making flipping impossible
837          * in case of parallels max irqs off latencies.
838          */
839         trace->stop(tr);
840         /* stop the tracing. */
841         tracing_stop();
842         /* check both trace buffers */
843         ret = trace_test_buffer(&tr->trace_buffer, NULL);
844         if (!ret)
845                 ret = trace_test_buffer(&tr->max_buffer, &count);
846         trace->reset(tr);
847         tracing_start();
848
849         if (!ret && !count) {
850                 printk(KERN_CONT ".. no entries found ..");
851                 ret = -1;
852         }
853
854         tr->max_latency = save_max;
855
856         return ret;
857 }
858 #endif /* CONFIG_IRQSOFF_TRACER */
859
860 #ifdef CONFIG_PREEMPT_TRACER
861 int
862 trace_selftest_startup_preemptoff(struct tracer *trace, struct trace_array *tr)
863 {
864         unsigned long save_max = tr->max_latency;
865         unsigned long count;
866         int ret;
867
868         /*
869          * Now that the big kernel lock is no longer preemptable,
870          * and this is called with the BKL held, it will always
871          * fail. If preemption is already disabled, simply
872          * pass the test. When the BKL is removed, or becomes
873          * preemptible again, we will once again test this,
874          * so keep it in.
875          */
876         if (preempt_count()) {
877                 printk(KERN_CONT "can not test ... force ");
878                 return 0;
879         }
880
881         /* start the tracing */
882         ret = tracer_init(trace, tr);
883         if (ret) {
884                 warn_failed_init_tracer(trace, ret);
885                 return ret;
886         }
887
888         /* reset the max latency */
889         tr->max_latency = 0;
890         /* disable preemption for a bit */
891         preempt_disable();
892         udelay(100);
893         preempt_enable();
894
895         /*
896          * Stop the tracer to avoid a warning subsequent
897          * to buffer flipping failure because tracing_stop()
898          * disables the tr and max buffers, making flipping impossible
899          * in case of parallels max preempt off latencies.
900          */
901         trace->stop(tr);
902         /* stop the tracing. */
903         tracing_stop();
904         /* check both trace buffers */
905         ret = trace_test_buffer(&tr->trace_buffer, NULL);
906         if (!ret)
907                 ret = trace_test_buffer(&tr->max_buffer, &count);
908         trace->reset(tr);
909         tracing_start();
910
911         if (!ret && !count) {
912                 printk(KERN_CONT ".. no entries found ..");
913                 ret = -1;
914         }
915
916         tr->max_latency = save_max;
917
918         return ret;
919 }
920 #endif /* CONFIG_PREEMPT_TRACER */
921
922 #if defined(CONFIG_IRQSOFF_TRACER) && defined(CONFIG_PREEMPT_TRACER)
923 int
924 trace_selftest_startup_preemptirqsoff(struct tracer *trace, struct trace_array *tr)
925 {
926         unsigned long save_max = tr->max_latency;
927         unsigned long count;
928         int ret;
929
930         /*
931          * Now that the big kernel lock is no longer preemptable,
932          * and this is called with the BKL held, it will always
933          * fail. If preemption is already disabled, simply
934          * pass the test. When the BKL is removed, or becomes
935          * preemptible again, we will once again test this,
936          * so keep it in.
937          */
938         if (preempt_count()) {
939                 printk(KERN_CONT "can not test ... force ");
940                 return 0;
941         }
942
943         /* start the tracing */
944         ret = tracer_init(trace, tr);
945         if (ret) {
946                 warn_failed_init_tracer(trace, ret);
947                 goto out_no_start;
948         }
949
950         /* reset the max latency */
951         tr->max_latency = 0;
952
953         /* disable preemption and interrupts for a bit */
954         preempt_disable();
955         local_irq_disable();
956         udelay(100);
957         preempt_enable();
958         /* reverse the order of preempt vs irqs */
959         local_irq_enable();
960
961         /*
962          * Stop the tracer to avoid a warning subsequent
963          * to buffer flipping failure because tracing_stop()
964          * disables the tr and max buffers, making flipping impossible
965          * in case of parallels max irqs/preempt off latencies.
966          */
967         trace->stop(tr);
968         /* stop the tracing. */
969         tracing_stop();
970         /* check both trace buffers */
971         ret = trace_test_buffer(&tr->trace_buffer, NULL);
972         if (ret)
973                 goto out;
974
975         ret = trace_test_buffer(&tr->max_buffer, &count);
976         if (ret)
977                 goto out;
978
979         if (!ret && !count) {
980                 printk(KERN_CONT ".. no entries found ..");
981                 ret = -1;
982                 goto out;
983         }
984
985         /* do the test by disabling interrupts first this time */
986         tr->max_latency = 0;
987         tracing_start();
988         trace->start(tr);
989
990         preempt_disable();
991         local_irq_disable();
992         udelay(100);
993         preempt_enable();
994         /* reverse the order of preempt vs irqs */
995         local_irq_enable();
996
997         trace->stop(tr);
998         /* stop the tracing. */
999         tracing_stop();
1000         /* check both trace buffers */
1001         ret = trace_test_buffer(&tr->trace_buffer, NULL);
1002         if (ret)
1003                 goto out;
1004
1005         ret = trace_test_buffer(&tr->max_buffer, &count);
1006
1007         if (!ret && !count) {
1008                 printk(KERN_CONT ".. no entries found ..");
1009                 ret = -1;
1010                 goto out;
1011         }
1012
1013 out:
1014         tracing_start();
1015 out_no_start:
1016         trace->reset(tr);
1017         tr->max_latency = save_max;
1018
1019         return ret;
1020 }
1021 #endif /* CONFIG_IRQSOFF_TRACER && CONFIG_PREEMPT_TRACER */
1022
1023 #ifdef CONFIG_NOP_TRACER
1024 int
1025 trace_selftest_startup_nop(struct tracer *trace, struct trace_array *tr)
1026 {
1027         /* What could possibly go wrong? */
1028         return 0;
1029 }
1030 #endif
1031
1032 #ifdef CONFIG_SCHED_TRACER
1033
1034 struct wakeup_test_data {
1035         struct completion       is_ready;
1036         int                     go;
1037 };
1038
1039 static int trace_wakeup_test_thread(void *data)
1040 {
1041         /* Make this a -deadline thread */
1042         static const struct sched_attr attr = {
1043                 .sched_policy = SCHED_DEADLINE,
1044                 .sched_runtime = 100000ULL,
1045                 .sched_deadline = 10000000ULL,
1046                 .sched_period = 10000000ULL
1047         };
1048         struct wakeup_test_data *x = data;
1049
1050         sched_setattr(current, &attr);
1051
1052         /* Make it know we have a new prio */
1053         complete(&x->is_ready);
1054
1055         /* now go to sleep and let the test wake us up */
1056         set_current_state(TASK_INTERRUPTIBLE);
1057         while (!x->go) {
1058                 schedule();
1059                 set_current_state(TASK_INTERRUPTIBLE);
1060         }
1061
1062         complete(&x->is_ready);
1063
1064         set_current_state(TASK_INTERRUPTIBLE);
1065
1066         /* we are awake, now wait to disappear */
1067         while (!kthread_should_stop()) {
1068                 schedule();
1069                 set_current_state(TASK_INTERRUPTIBLE);
1070         }
1071
1072         __set_current_state(TASK_RUNNING);
1073
1074         return 0;
1075 }
1076 int
1077 trace_selftest_startup_wakeup(struct tracer *trace, struct trace_array *tr)
1078 {
1079         unsigned long save_max = tr->max_latency;
1080         struct task_struct *p;
1081         struct wakeup_test_data data;
1082         unsigned long count;
1083         int ret;
1084
1085         memset(&data, 0, sizeof(data));
1086
1087         init_completion(&data.is_ready);
1088
1089         /* create a -deadline thread */
1090         p = kthread_run(trace_wakeup_test_thread, &data, "ftrace-test");
1091         if (IS_ERR(p)) {
1092                 printk(KERN_CONT "Failed to create ftrace wakeup test thread ");
1093                 return -1;
1094         }
1095
1096         /* make sure the thread is running at -deadline policy */
1097         wait_for_completion(&data.is_ready);
1098
1099         /* start the tracing */
1100         ret = tracer_init(trace, tr);
1101         if (ret) {
1102                 warn_failed_init_tracer(trace, ret);
1103                 return ret;
1104         }
1105
1106         /* reset the max latency */
1107         tr->max_latency = 0;
1108
1109         while (p->on_rq) {
1110                 /*
1111                  * Sleep to make sure the -deadline thread is asleep too.
1112                  * On virtual machines we can't rely on timings,
1113                  * but we want to make sure this test still works.
1114                  */
1115                 msleep(100);
1116         }
1117
1118         init_completion(&data.is_ready);
1119
1120         data.go = 1;
1121         /* memory barrier is in the wake_up_process() */
1122
1123         wake_up_process(p);
1124
1125         /* Wait for the task to wake up */
1126         wait_for_completion(&data.is_ready);
1127
1128         /* stop the tracing. */
1129         tracing_stop();
1130         /* check both trace buffers */
1131         ret = trace_test_buffer(&tr->trace_buffer, NULL);
1132         if (!ret)
1133                 ret = trace_test_buffer(&tr->max_buffer, &count);
1134
1135
1136         trace->reset(tr);
1137         tracing_start();
1138
1139         tr->max_latency = save_max;
1140
1141         /* kill the thread */
1142         kthread_stop(p);
1143
1144         if (!ret && !count) {
1145                 printk(KERN_CONT ".. no entries found ..");
1146                 ret = -1;
1147         }
1148
1149         return ret;
1150 }
1151 #endif /* CONFIG_SCHED_TRACER */
1152
1153 #ifdef CONFIG_CONTEXT_SWITCH_TRACER
1154 int
1155 trace_selftest_startup_sched_switch(struct tracer *trace, struct trace_array *tr)
1156 {
1157         unsigned long count;
1158         int ret;
1159
1160         /* start the tracing */
1161         ret = tracer_init(trace, tr);
1162         if (ret) {
1163                 warn_failed_init_tracer(trace, ret);
1164                 return ret;
1165         }
1166
1167         /* Sleep for a 1/10 of a second */
1168         msleep(100);
1169         /* stop the tracing. */
1170         tracing_stop();
1171         /* check the trace buffer */
1172         ret = trace_test_buffer(&tr->trace_buffer, &count);
1173         trace->reset(tr);
1174         tracing_start();
1175
1176         if (!ret && !count) {
1177                 printk(KERN_CONT ".. no entries found ..");
1178                 ret = -1;
1179         }
1180
1181         return ret;
1182 }
1183 #endif /* CONFIG_CONTEXT_SWITCH_TRACER */
1184
1185 #ifdef CONFIG_BRANCH_TRACER
1186 int
1187 trace_selftest_startup_branch(struct tracer *trace, struct trace_array *tr)
1188 {
1189         unsigned long count;
1190         int ret;
1191
1192         /* start the tracing */
1193         ret = tracer_init(trace, tr);
1194         if (ret) {
1195                 warn_failed_init_tracer(trace, ret);
1196                 return ret;
1197         }
1198
1199         /* Sleep for a 1/10 of a second */
1200         msleep(100);
1201         /* stop the tracing. */
1202         tracing_stop();
1203         /* check the trace buffer */
1204         ret = trace_test_buffer(&tr->trace_buffer, &count);
1205         trace->reset(tr);
1206         tracing_start();
1207
1208         if (!ret && !count) {
1209                 printk(KERN_CONT ".. no entries found ..");
1210                 ret = -1;
1211         }
1212
1213         return ret;
1214 }
1215 #endif /* CONFIG_BRANCH_TRACER */
1216