#!/bin/sh # SPDX-License-Identifier: GPL-2.0 # description: Test creation and deletion of trace instances while setting an event if [ ! -d instances ] ; then echo "no instance directory with this kernel" exit_unsupported; fi fail() { # mesg rmdir foo 2>/dev/null echo $1 set -e exit $FAIL } cd instances # we don't want to fail on error set +e mkdir x rmdir x result=$? if [ $result -ne 0 ]; then echo "instance rmdir not supported" exit_unsupported fi instance_slam() { while :; do mkdir foo 2> /dev/null rmdir foo 2> /dev/null done } instance_read() { while :; do cat foo/trace 1> /dev/null 2>&1 done } instance_set() { while :; do echo 1 > foo/events/sched/sched_switch done 2> /dev/null } instance_slam & p1=$! echo $p1 instance_set & p2=$! echo $p2 instance_read & p3=$! echo $p3 sleep 1 kill -1 $p3 kill -1 $p2 kill -1 $p1 echo "Wait for processes to finish" wait $p1 $p2 $p3 echo "all processes finished, wait for cleanup" sleep 1 mkdir foo ls foo > /dev/null rmdir foo if [ -d foo ]; then fail "foo still exists" fi mkdir foo echo "schedule:enable_event:sched:sched_switch" > foo/set_ftrace_filter rmdir foo if [ -d foo ]; then fail "foo still exists" fi if grep -q "schedule:enable_event:sched:sched_switch" ../set_ftrace_filter; then echo "Older kernel detected. Cleanup filter" echo '!schedule:enable_event:sched:sched_switch' > ../set_ftrace_filter fi instance_slam() { while :; do mkdir x mkdir y mkdir z rmdir x rmdir y rmdir z done 2>/dev/null } instance_slam & p1=$! echo $p1 instance_slam & p2=$! echo $p2 instance_slam & p3=$! echo $p3 instance_slam & p4=$! echo $p4 instance_slam & p5=$! echo $p5 ls -lR >/dev/null sleep 1 kill -1 $p1 kill -1 $p2 kill -1 $p3 kill -1 $p4 kill -1 $p5 echo "Wait for processes to finish" wait $p1 $p2 $p3 $p4 $p5 echo "all processes finished, wait for cleanup" mkdir x y z ls x y z rmdir x y z for d in x y z; do if [ -d $d ]; then fail "instance $d still exists" fi done set -e exit 0