#!/bin/sh # SPDX-License-Identifier: GPL-2.0 # description: event tracing - restricts events based on pid notrace filtering # flags: instance do_reset() { echo > set_event echo > set_event_pid echo > set_event_notrace_pid echo 0 > options/event-fork echo 0 > events/enable clear_trace echo 1 > tracing_on } fail() { #msg cat trace do_reset echo $1 exit_fail } count_pid() { pid=$@ cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l } count_no_pid() { pid=$1 cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l } enable_system() { system=$1 if [ -d events/$system ]; then echo 1 > events/$system/enable fi } enable_events() { echo 0 > tracing_on # Enable common groups of events, as all events can allow for # events to be traced via scheduling that we don't care to test. enable_system syscalls enable_system rcu enable_system block enable_system exceptions enable_system irq enable_system net enable_system power enable_system signal enable_system sock enable_system timer enable_system thermal echo 1 > tracing_on } if [ ! -f set_event -o ! -d events/sched ]; then echo "event tracing is not supported" exit_unsupported fi if [ ! -f set_event_pid -o ! -f set_event_notrace_pid ]; then echo "event pid notrace filtering is not supported" exit_unsupported fi echo 0 > options/event-fork do_reset read mypid rest < /proc/self/stat echo $mypid > set_event_notrace_pid grep -q $mypid set_event_notrace_pid enable_events yield echo 0 > tracing_on cnt=`count_pid $mypid` if [ $cnt -ne 0 ]; then fail "Filtered out task has events" fi cnt=`count_no_pid $mypid` if [ $cnt -eq 0 ]; then fail "No other events were recorded" fi do_reset echo $mypid > set_event_notrace_pid echo 1 > options/event-fork enable_events yield & child=$! echo "child = $child" wait $child echo 0 > tracing_on cnt=`count_pid $mypid` if [ $cnt -ne 0 ]; then fail "Filtered out task has events" fi cnt=`count_pid $child` if [ $cnt -ne 0 ]; then fail "Child of filtered out taskhas events" fi cnt=`count_no_pid $mypid` if [ $cnt -eq 0 ]; then fail "No other events were recorded" fi do_reset exit 0