Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / ftrace / test.d / ftrace / fgraph-filter-stack.tc
1 #!/bin/sh
2 # SPDX-License-Identifier: GPL-2.0
3 # description: ftrace - function graph filters with stack tracer
4
5 # Make sure that function graph filtering works, and is not
6 # affected by other tracers enabled (like stack tracer)
7
8 if ! grep -q function_graph available_tracers; then
9     echo "no function graph tracer configured"
10     exit_unsupported
11 fi
12
13 if [ ! -f set_ftrace_filter ]; then
14     echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
15     exit_unsupported
16 fi
17
18 do_reset() {
19     if [ -e /proc/sys/kernel/stack_tracer_enabled ]; then
20             echo 0 > /proc/sys/kernel/stack_tracer_enabled
21     fi
22 }
23
24 fail() { # msg
25     do_reset
26     echo $1
27     exit_fail
28 }
29
30 disable_tracing
31 clear_trace;
32
33 # filter something, schedule is always good
34 if ! echo "schedule" > set_ftrace_filter; then
35     # test for powerpc 64
36     if ! echo ".schedule" > set_ftrace_filter; then
37         fail "can not enable schedule filter"
38     fi
39 fi
40
41 echo function_graph > current_tracer
42
43 if [ ! -f stack_trace ]; then
44     echo "Stack tracer not configured"
45     do_reset
46     exit_unsupported;
47 fi
48
49 echo "Now testing with stack tracer"
50
51 echo 1 > /proc/sys/kernel/stack_tracer_enabled
52
53 disable_tracing
54 clear_trace
55 enable_tracing
56 sleep 1
57
58 count=`cat trace | grep '()' | grep -v schedule | wc -l`
59
60 if [ $count -ne 0 ]; then
61     fail "Graph filtering not working with stack tracer?"
62 fi
63
64 # Make sure we did find something
65 count=`cat trace | grep 'schedule()' | wc -l` 
66 if [ $count -eq 0 ]; then
67     fail "No schedule traces found?"
68 fi
69
70 echo 0 > /proc/sys/kernel/stack_tracer_enabled
71 clear_trace
72 sleep 1
73
74
75 count=`cat trace | grep '()' | grep -v schedule | wc -l`
76
77 if [ $count -ne 0 ]; then
78     fail "Graph filtering not working after stack tracer disabled?"
79 fi
80
81 count=`cat trace | grep 'schedule()' | wc -l` 
82 if [ $count -eq 0 ]; then
83     fail "No schedule traces found?"
84 fi
85
86 do_reset
87
88 exit 0