Since older kernel didn't support separated instance of set_ftrace_filter, if the test case set the filter in an instance, it will propagate to top-level instance. This means that the filter setting remains even if we remove the instance, and will cause other tests failure. To avoid this issue, reset the ftrace filter if we detect the propagation. Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
146 lines
2.1 KiB
Bash
146 lines
2.1 KiB
Bash
#!/bin/sh
|
|
# 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
|