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