Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/sh
0002 # SPDX-License-Identifier: GPL-2.0
0003 # description: event tracing - restricts events based on pid notrace filtering
0004 # requires: set_event events/sched set_event_pid set_event_notrace_pid
0005 # flags: instance
0006 
0007 do_reset() {
0008     echo > set_event
0009     echo > set_event_pid
0010     echo > set_event_notrace_pid
0011     echo 0 > options/event-fork
0012     echo 0 > events/enable
0013     clear_trace
0014     echo 1 > tracing_on
0015 }
0016 
0017 fail() { #msg
0018     cat trace
0019     do_reset
0020     echo $1
0021     exit_fail
0022 }
0023 
0024 count_pid() {
0025     pid=$@
0026     cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l
0027 }
0028 
0029 count_no_pid() {
0030     pid=$1
0031     cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l
0032 }
0033 
0034 enable_system() {
0035     system=$1
0036 
0037     if [ -d events/$system ]; then
0038         echo 1 > events/$system/enable
0039     fi
0040 }
0041 
0042 enable_events() {
0043     echo 0 > tracing_on
0044     # Enable common groups of events, as all events can allow for
0045     # events to be traced via scheduling that we don't care to test.
0046     enable_system syscalls
0047     enable_system rcu
0048     enable_system block
0049     enable_system exceptions
0050     enable_system irq
0051     enable_system net
0052     enable_system power
0053     enable_system signal
0054     enable_system sock
0055     enable_system timer
0056     enable_system thermal
0057     echo 1 > tracing_on
0058 }
0059 
0060 other_task() {
0061     sleep .001 || usleep 1 || sleep 1
0062 }
0063 
0064 echo 0 > options/event-fork
0065 
0066 do_reset
0067 
0068 read mypid rest < /proc/self/stat
0069 
0070 echo $mypid > set_event_notrace_pid
0071 grep -q $mypid set_event_notrace_pid
0072 
0073 enable_events
0074 
0075 yield
0076 
0077 echo 0 > tracing_on
0078 
0079 cnt=`count_pid $mypid`
0080 if [ $cnt -ne 0 ]; then
0081     fail "Filtered out task has events"
0082 fi
0083 
0084 cnt=`count_no_pid $mypid`
0085 if [ $cnt -eq 0 ]; then
0086     fail "No other events were recorded"
0087 fi
0088 
0089 do_reset
0090 
0091 echo $mypid > set_event_notrace_pid
0092 echo 1 > options/event-fork
0093 
0094 enable_events
0095 
0096 yield &
0097 child=$!
0098 echo "child = $child"
0099 wait $child
0100 
0101 # Be sure some other events will happen for small systems (e.g. 1 core)
0102 other_task
0103 
0104 echo 0 > tracing_on
0105 
0106 cnt=`count_pid $mypid`
0107 if [ $cnt -ne 0 ]; then
0108     fail "Filtered out task has events"
0109 fi
0110 
0111 cnt=`count_pid $child`
0112 if [ $cnt -ne 0 ]; then
0113     fail "Child of filtered out taskhas events"
0114 fi
0115 
0116 cnt=`count_no_pid $mypid`
0117 if [ $cnt -eq 0 ]; then
0118     fail "No other events were recorded"
0119 fi
0120 
0121 do_reset
0122 
0123 exit 0