#!/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
