xref: /openbmc/linux/kernel/trace/trace_selftest.c (revision 1c2dd16a)
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 
1217