Linux-libre 4.9.30-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / ftrace / test.d / event / event-pid.tc
1 #!/bin/sh
2 # description: event tracing - restricts events based on pid
3
4 do_reset() {
5     echo > set_event
6     echo > set_event_pid
7     echo 0 > options/event-fork
8     clear_trace
9 }
10
11 fail() { #msg
12     do_reset
13     echo $1
14     exit $FAIL
15 }
16
17 yield() {
18     ping localhost -c 1 || sleep .001 || usleep 1 || sleep 1
19 }
20
21 if [ ! -f set_event -o ! -d events/sched ]; then
22     echo "event tracing is not supported"
23     exit_unsupported
24 fi
25
26 if [ ! -f set_event_pid ]; then
27     echo "event pid filtering is not supported"
28     exit_unsupported
29 fi
30
31 reset_tracer
32 do_reset
33
34 echo 1 > events/sched/sched_switch/enable
35
36 yield
37
38 count=`cat trace | grep sched_switch | wc -l`
39 if [ $count -eq 0 ]; then
40     fail "sched_switch events are not recorded"
41 fi
42
43 do_reset
44
45 read mypid rest < /proc/self/stat
46
47 echo $mypid > set_event_pid
48 echo 'sched:sched_switch' > set_event
49
50 yield
51
52 count=`cat trace | grep sched_switch | grep -v "pid=$mypid" | wc -l`
53 if [ $count -ne 0 ]; then
54     fail "sched_switch events from other task are recorded"
55 fi
56
57 do_reset
58
59 echo $mypid > set_event_pid
60 echo 1 > options/event-fork
61 echo 1 > events/sched/sched_switch/enable
62
63 yield
64
65 count=`cat trace | grep sched_switch | grep -v "pid=$mypid" | wc -l`
66 if [ $count -eq 0 ]; then
67     fail "sched_switch events from other task are not recorded"
68 fi
69
70 do_reset
71
72 exit 0