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 73