162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci# description: Test creation and deletion of trace instances while setting an event
462306a36Sopenharmony_ci# requires: instances
562306a36Sopenharmony_ci
662306a36Sopenharmony_cifail() { # mesg
762306a36Sopenharmony_ci    rmdir foo 2>/dev/null
862306a36Sopenharmony_ci    echo $1
962306a36Sopenharmony_ci    set -e
1062306a36Sopenharmony_ci    exit_fail
1162306a36Sopenharmony_ci}
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cicd instances
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci# we don't want to fail on error
1662306a36Sopenharmony_ciset +e
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cimkdir x
1962306a36Sopenharmony_cirmdir x
2062306a36Sopenharmony_ciresult=$?
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ciif [ $result -ne 0 ]; then
2362306a36Sopenharmony_ci    echo "instance rmdir not supported"
2462306a36Sopenharmony_ci    exit_unsupported
2562306a36Sopenharmony_cifi
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciinstance_slam() {
2862306a36Sopenharmony_ci        while :; do
2962306a36Sopenharmony_ci                mkdir foo 2> /dev/null
3062306a36Sopenharmony_ci                rmdir foo 2> /dev/null
3162306a36Sopenharmony_ci        done
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciinstance_read() {
3562306a36Sopenharmony_ci        while :; do
3662306a36Sopenharmony_ci                cat foo/trace 1> /dev/null 2>&1
3762306a36Sopenharmony_ci        done
3862306a36Sopenharmony_ci}
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciinstance_set() {
4162306a36Sopenharmony_ci        while :; do
4262306a36Sopenharmony_ci                echo 1 > foo/events/sched/sched_switch/enable
4362306a36Sopenharmony_ci        done 2> /dev/null
4462306a36Sopenharmony_ci}
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciinstance_slam &
4762306a36Sopenharmony_cip1=$!
4862306a36Sopenharmony_ciecho $p1
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ciinstance_set &
5162306a36Sopenharmony_cip2=$!
5262306a36Sopenharmony_ciecho $p2
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciinstance_read &
5562306a36Sopenharmony_cip3=$!
5662306a36Sopenharmony_ciecho $p3
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cisleep 1
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cikill -1 $p3
6162306a36Sopenharmony_cikill -1 $p2
6262306a36Sopenharmony_cikill -1 $p1
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ciecho "Wait for processes to finish"
6562306a36Sopenharmony_ciwait $p1 $p2 $p3
6662306a36Sopenharmony_ciecho "all processes finished, wait for cleanup"
6762306a36Sopenharmony_cisleep 1
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_cimkdir foo
7062306a36Sopenharmony_cils foo > /dev/null
7162306a36Sopenharmony_cirmdir foo
7262306a36Sopenharmony_ciif [ -d foo ]; then
7362306a36Sopenharmony_ci        fail "foo still exists"
7462306a36Sopenharmony_cifi
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cimkdir foo
7762306a36Sopenharmony_ciecho "schedule:enable_event:sched:sched_switch" > foo/set_ftrace_filter
7862306a36Sopenharmony_cirmdir foo
7962306a36Sopenharmony_ciif [ -d foo ]; then
8062306a36Sopenharmony_ci        fail "foo still exists"
8162306a36Sopenharmony_cifi
8262306a36Sopenharmony_ciif grep -q "schedule:enable_event:sched:sched_switch" ../set_ftrace_filter; then
8362306a36Sopenharmony_ci	echo "Older kernel detected. Cleanup filter"
8462306a36Sopenharmony_ci	echo '!schedule:enable_event:sched:sched_switch' > ../set_ftrace_filter
8562306a36Sopenharmony_cifi
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciinstance_slam() {
8862306a36Sopenharmony_ci    while :; do
8962306a36Sopenharmony_ci	mkdir x
9062306a36Sopenharmony_ci	mkdir y
9162306a36Sopenharmony_ci	mkdir z
9262306a36Sopenharmony_ci	rmdir x
9362306a36Sopenharmony_ci	rmdir y
9462306a36Sopenharmony_ci	rmdir z
9562306a36Sopenharmony_ci    done 2>/dev/null
9662306a36Sopenharmony_ci}
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciinstance_slam &
9962306a36Sopenharmony_cip1=$!
10062306a36Sopenharmony_ciecho $p1
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ciinstance_slam &
10362306a36Sopenharmony_cip2=$!
10462306a36Sopenharmony_ciecho $p2
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciinstance_slam &
10762306a36Sopenharmony_cip3=$!
10862306a36Sopenharmony_ciecho $p3
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ciinstance_slam &
11162306a36Sopenharmony_cip4=$!
11262306a36Sopenharmony_ciecho $p4
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ciinstance_slam &
11562306a36Sopenharmony_cip5=$!
11662306a36Sopenharmony_ciecho $p5
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_cils -lR >/dev/null
11962306a36Sopenharmony_cisleep 1
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_cikill -1 $p1
12262306a36Sopenharmony_cikill -1 $p2
12362306a36Sopenharmony_cikill -1 $p3
12462306a36Sopenharmony_cikill -1 $p4
12562306a36Sopenharmony_cikill -1 $p5
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciecho "Wait for processes to finish"
12862306a36Sopenharmony_ciwait $p1 $p2 $p3 $p4 $p5
12962306a36Sopenharmony_ciecho "all processes finished, wait for cleanup"
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_cimkdir x y z
13262306a36Sopenharmony_cils x y z
13362306a36Sopenharmony_cirmdir x y z
13462306a36Sopenharmony_cifor d in x y z; do
13562306a36Sopenharmony_ci        if [ -d $d ]; then
13662306a36Sopenharmony_ci                fail "instance $d still exists"
13762306a36Sopenharmony_ci        fi
13862306a36Sopenharmony_cidone
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ciset -e
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ciexit 0
143