instance-event.tc 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0
  3. # description: Test creation and deletion of trace instances while setting an event
  4. # requires: instances
  5. fail() { # mesg
  6. rmdir foo 2>/dev/null
  7. echo $1
  8. set -e
  9. exit_fail
  10. }
  11. cd instances
  12. # we don't want to fail on error
  13. set +e
  14. mkdir x
  15. rmdir x
  16. result=$?
  17. if [ $result -ne 0 ]; then
  18. echo "instance rmdir not supported"
  19. exit_unsupported
  20. fi
  21. instance_slam() {
  22. while :; do
  23. mkdir foo 2> /dev/null
  24. rmdir foo 2> /dev/null
  25. done
  26. }
  27. instance_read() {
  28. while :; do
  29. cat foo/trace 1> /dev/null 2>&1
  30. done
  31. }
  32. instance_set() {
  33. while :; do
  34. echo 1 > foo/events/sched/sched_switch/enable
  35. done 2> /dev/null
  36. }
  37. instance_slam &
  38. p1=$!
  39. echo $p1
  40. instance_set &
  41. p2=$!
  42. echo $p2
  43. instance_read &
  44. p3=$!
  45. echo $p3
  46. sleep 1
  47. kill -1 $p3
  48. kill -1 $p2
  49. kill -1 $p1
  50. echo "Wait for processes to finish"
  51. wait $p1 $p2 $p3
  52. echo "all processes finished, wait for cleanup"
  53. sleep 1
  54. mkdir foo
  55. ls foo > /dev/null
  56. rmdir foo
  57. if [ -d foo ]; then
  58. fail "foo still exists"
  59. fi
  60. mkdir foo
  61. echo "schedule:enable_event:sched:sched_switch" > foo/set_ftrace_filter
  62. rmdir foo
  63. if [ -d foo ]; then
  64. fail "foo still exists"
  65. fi
  66. if grep -q "schedule:enable_event:sched:sched_switch" ../set_ftrace_filter; then
  67. echo "Older kernel detected. Cleanup filter"
  68. echo '!schedule:enable_event:sched:sched_switch' > ../set_ftrace_filter
  69. fi
  70. instance_slam() {
  71. while :; do
  72. mkdir x
  73. mkdir y
  74. mkdir z
  75. rmdir x
  76. rmdir y
  77. rmdir z
  78. done 2>/dev/null
  79. }
  80. instance_slam &
  81. p1=$!
  82. echo $p1
  83. instance_slam &
  84. p2=$!
  85. echo $p2
  86. instance_slam &
  87. p3=$!
  88. echo $p3
  89. instance_slam &
  90. p4=$!
  91. echo $p4
  92. instance_slam &
  93. p5=$!
  94. echo $p5
  95. ls -lR >/dev/null
  96. sleep 1
  97. kill -1 $p1
  98. kill -1 $p2
  99. kill -1 $p3
  100. kill -1 $p4
  101. kill -1 $p5
  102. echo "Wait for processes to finish"
  103. wait $p1 $p2 $p3 $p4 $p5
  104. echo "all processes finished, wait for cleanup"
  105. mkdir x y z
  106. ls x y z
  107. rmdir x y z
  108. for d in x y z; do
  109. if [ -d $d ]; then
  110. fail "instance $d still exists"
  111. fi
  112. done
  113. set -e
  114. exit 0