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