Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/ftrace: Add test to test new set_event_notrace_pid file

A new file was added to the tracing directory that will allow a user to
place a PID into it and the task associated to that PID will not have its
events traced. If the event-fork option is enabled, then neither will the
children of that task have its events traced.

Cc: linux-kselftest@vger.kernel.org
Cc: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>

+125
+125
tools/testing/selftests/ftrace/test.d/event/event-no-pid.tc
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + # description: event tracing - restricts events based on pid notrace filtering 4 + # flags: instance 5 + 6 + do_reset() { 7 + echo > set_event 8 + echo > set_event_pid 9 + echo > set_event_notrace_pid 10 + echo 0 > options/event-fork 11 + echo 0 > events/enable 12 + clear_trace 13 + echo 1 > tracing_on 14 + } 15 + 16 + fail() { #msg 17 + cat trace 18 + do_reset 19 + echo $1 20 + exit_fail 21 + } 22 + 23 + count_pid() { 24 + pid=$@ 25 + cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l 26 + } 27 + 28 + count_no_pid() { 29 + pid=$1 30 + cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l 31 + } 32 + 33 + enable_system() { 34 + system=$1 35 + 36 + if [ -d events/$system ]; then 37 + echo 1 > events/$system/enable 38 + fi 39 + } 40 + 41 + enable_events() { 42 + echo 0 > tracing_on 43 + # Enable common groups of events, as all events can allow for 44 + # events to be traced via scheduling that we don't care to test. 45 + enable_system syscalls 46 + enable_system rcu 47 + enable_system block 48 + enable_system exceptions 49 + enable_system irq 50 + enable_system net 51 + enable_system power 52 + enable_system signal 53 + enable_system sock 54 + enable_system timer 55 + enable_system thermal 56 + echo 1 > tracing_on 57 + } 58 + 59 + if [ ! -f set_event -o ! -d events/sched ]; then 60 + echo "event tracing is not supported" 61 + exit_unsupported 62 + fi 63 + 64 + if [ ! -f set_event_pid -o ! -f set_event_notrace_pid ]; then 65 + echo "event pid notrace filtering is not supported" 66 + exit_unsupported 67 + fi 68 + 69 + echo 0 > options/event-fork 70 + 71 + do_reset 72 + 73 + read mypid rest < /proc/self/stat 74 + 75 + echo $mypid > set_event_notrace_pid 76 + grep -q $mypid set_event_notrace_pid 77 + 78 + enable_events 79 + 80 + yield 81 + 82 + echo 0 > tracing_on 83 + 84 + cnt=`count_pid $mypid` 85 + if [ $cnt -ne 0 ]; then 86 + fail "Filtered out task has events" 87 + fi 88 + 89 + cnt=`count_no_pid $mypid` 90 + if [ $cnt -eq 0 ]; then 91 + fail "No other events were recorded" 92 + fi 93 + 94 + do_reset 95 + 96 + echo $mypid > set_event_notrace_pid 97 + echo 1 > options/event-fork 98 + 99 + enable_events 100 + 101 + yield & 102 + child=$! 103 + echo "child = $child" 104 + wait $child 105 + 106 + echo 0 > tracing_on 107 + 108 + cnt=`count_pid $mypid` 109 + if [ $cnt -ne 0 ]; then 110 + fail "Filtered out task has events" 111 + fi 112 + 113 + cnt=`count_pid $child` 114 + if [ $cnt -ne 0 ]; then 115 + fail "Child of filtered out taskhas events" 116 + fi 117 + 118 + cnt=`count_no_pid $mypid` 119 + if [ $cnt -eq 0 ]; then 120 + fail "No other events were recorded" 121 + fi 122 + 123 + do_reset 124 + 125 + exit 0