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