1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 3*4882a593Smuzhiyun# description: Test creation and deletion of trace instances while setting an event 4*4882a593Smuzhiyun# requires: instances 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunfail() { # mesg 7*4882a593Smuzhiyun rmdir foo 2>/dev/null 8*4882a593Smuzhiyun echo $1 9*4882a593Smuzhiyun set -e 10*4882a593Smuzhiyun exit_fail 11*4882a593Smuzhiyun} 12*4882a593Smuzhiyun 13*4882a593Smuzhiyuncd instances 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun# we don't want to fail on error 16*4882a593Smuzhiyunset +e 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunmkdir x 19*4882a593Smuzhiyunrmdir x 20*4882a593Smuzhiyunresult=$? 21*4882a593Smuzhiyun 22*4882a593Smuzhiyunif [ $result -ne 0 ]; then 23*4882a593Smuzhiyun echo "instance rmdir not supported" 24*4882a593Smuzhiyun exit_unsupported 25*4882a593Smuzhiyunfi 26*4882a593Smuzhiyun 27*4882a593Smuzhiyuninstance_slam() { 28*4882a593Smuzhiyun while :; do 29*4882a593Smuzhiyun mkdir foo 2> /dev/null 30*4882a593Smuzhiyun rmdir foo 2> /dev/null 31*4882a593Smuzhiyun done 32*4882a593Smuzhiyun} 33*4882a593Smuzhiyun 34*4882a593Smuzhiyuninstance_read() { 35*4882a593Smuzhiyun while :; do 36*4882a593Smuzhiyun cat foo/trace 1> /dev/null 2>&1 37*4882a593Smuzhiyun done 38*4882a593Smuzhiyun} 39*4882a593Smuzhiyun 40*4882a593Smuzhiyuninstance_set() { 41*4882a593Smuzhiyun while :; do 42*4882a593Smuzhiyun echo 1 > foo/events/sched/sched_switch 43*4882a593Smuzhiyun done 2> /dev/null 44*4882a593Smuzhiyun} 45*4882a593Smuzhiyun 46*4882a593Smuzhiyuninstance_slam & 47*4882a593Smuzhiyunp1=$! 48*4882a593Smuzhiyunecho $p1 49*4882a593Smuzhiyun 50*4882a593Smuzhiyuninstance_set & 51*4882a593Smuzhiyunp2=$! 52*4882a593Smuzhiyunecho $p2 53*4882a593Smuzhiyun 54*4882a593Smuzhiyuninstance_read & 55*4882a593Smuzhiyunp3=$! 56*4882a593Smuzhiyunecho $p3 57*4882a593Smuzhiyun 58*4882a593Smuzhiyunsleep 1 59*4882a593Smuzhiyun 60*4882a593Smuzhiyunkill -1 $p3 61*4882a593Smuzhiyunkill -1 $p2 62*4882a593Smuzhiyunkill -1 $p1 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunecho "Wait for processes to finish" 65*4882a593Smuzhiyunwait $p1 $p2 $p3 66*4882a593Smuzhiyunecho "all processes finished, wait for cleanup" 67*4882a593Smuzhiyunsleep 1 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunmkdir foo 70*4882a593Smuzhiyunls foo > /dev/null 71*4882a593Smuzhiyunrmdir foo 72*4882a593Smuzhiyunif [ -d foo ]; then 73*4882a593Smuzhiyun fail "foo still exists" 74*4882a593Smuzhiyunfi 75*4882a593Smuzhiyun 76*4882a593Smuzhiyunmkdir foo 77*4882a593Smuzhiyunecho "schedule:enable_event:sched:sched_switch" > foo/set_ftrace_filter 78*4882a593Smuzhiyunrmdir foo 79*4882a593Smuzhiyunif [ -d foo ]; then 80*4882a593Smuzhiyun fail "foo still exists" 81*4882a593Smuzhiyunfi 82*4882a593Smuzhiyunif grep -q "schedule:enable_event:sched:sched_switch" ../set_ftrace_filter; then 83*4882a593Smuzhiyun echo "Older kernel detected. Cleanup filter" 84*4882a593Smuzhiyun echo '!schedule:enable_event:sched:sched_switch' > ../set_ftrace_filter 85*4882a593Smuzhiyunfi 86*4882a593Smuzhiyun 87*4882a593Smuzhiyuninstance_slam() { 88*4882a593Smuzhiyun while :; do 89*4882a593Smuzhiyun mkdir x 90*4882a593Smuzhiyun mkdir y 91*4882a593Smuzhiyun mkdir z 92*4882a593Smuzhiyun rmdir x 93*4882a593Smuzhiyun rmdir y 94*4882a593Smuzhiyun rmdir z 95*4882a593Smuzhiyun done 2>/dev/null 96*4882a593Smuzhiyun} 97*4882a593Smuzhiyun 98*4882a593Smuzhiyuninstance_slam & 99*4882a593Smuzhiyunp1=$! 100*4882a593Smuzhiyunecho $p1 101*4882a593Smuzhiyun 102*4882a593Smuzhiyuninstance_slam & 103*4882a593Smuzhiyunp2=$! 104*4882a593Smuzhiyunecho $p2 105*4882a593Smuzhiyun 106*4882a593Smuzhiyuninstance_slam & 107*4882a593Smuzhiyunp3=$! 108*4882a593Smuzhiyunecho $p3 109*4882a593Smuzhiyun 110*4882a593Smuzhiyuninstance_slam & 111*4882a593Smuzhiyunp4=$! 112*4882a593Smuzhiyunecho $p4 113*4882a593Smuzhiyun 114*4882a593Smuzhiyuninstance_slam & 115*4882a593Smuzhiyunp5=$! 116*4882a593Smuzhiyunecho $p5 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunls -lR >/dev/null 119*4882a593Smuzhiyunsleep 1 120*4882a593Smuzhiyun 121*4882a593Smuzhiyunkill -1 $p1 122*4882a593Smuzhiyunkill -1 $p2 123*4882a593Smuzhiyunkill -1 $p3 124*4882a593Smuzhiyunkill -1 $p4 125*4882a593Smuzhiyunkill -1 $p5 126*4882a593Smuzhiyun 127*4882a593Smuzhiyunecho "Wait for processes to finish" 128*4882a593Smuzhiyunwait $p1 $p2 $p3 $p4 $p5 129*4882a593Smuzhiyunecho "all processes finished, wait for cleanup" 130*4882a593Smuzhiyun 131*4882a593Smuzhiyunmkdir x y z 132*4882a593Smuzhiyunls x y z 133*4882a593Smuzhiyunrmdir x y z 134*4882a593Smuzhiyunfor d in x y z; do 135*4882a593Smuzhiyun if [ -d $d ]; then 136*4882a593Smuzhiyun fail "instance $d still exists" 137*4882a593Smuzhiyun fi 138*4882a593Smuzhiyundone 139*4882a593Smuzhiyun 140*4882a593Smuzhiyunset -e 141*4882a593Smuzhiyun 142*4882a593Smuzhiyunexit 0 143