124 lines · plain
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03# description: event tracing - restricts events based on pid notrace filtering4# requires: set_event events/sched set_event_pid set_event_notrace_pid5# flags: instance6 7do_reset() {8 echo > set_event9 echo > set_event_pid10 echo > set_event_notrace_pid11 echo 0 > options/event-fork12 echo 0 > events/enable13 clear_trace14 echo 1 > tracing_on15}16 17fail() { #msg18 cat trace19 do_reset20 echo $121 exit_fail22}23 24count_pid() {25 pid=$@26 cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l27}28 29count_no_pid() {30 pid=$131 cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l32}33 34enable_system() {35 system=$136 37 if [ -d events/$system ]; then38 echo 1 > events/$system/enable39 fi40}41 42enable_events() {43 echo 0 > tracing_on44 # Enable common groups of events, as all events can allow for45 # events to be traced via scheduling that we don't care to test.46 enable_system syscalls47 enable_system rcu48 enable_system block49 enable_system exceptions50 enable_system irq51 enable_system net52 enable_system power53 enable_system signal54 enable_system sock55 enable_system timer56 enable_system thermal57 echo 1 > tracing_on58}59 60other_task() {61 sleep .001 || usleep 1 || sleep 162}63 64echo 0 > options/event-fork65 66do_reset67 68read mypid rest < /proc/self/stat69 70echo $mypid > set_event_notrace_pid71grep -q $mypid set_event_notrace_pid72 73enable_events74 75yield76 77echo 0 > tracing_on78 79cnt=`count_pid $mypid`80if [ $cnt -ne 0 ]; then81 fail "Filtered out task has events"82fi83 84cnt=`count_no_pid $mypid`85if [ $cnt -eq 0 ]; then86 fail "No other events were recorded"87fi88 89do_reset90 91echo $mypid > set_event_notrace_pid92echo 1 > options/event-fork93 94enable_events95 96yield &97child=$!98echo "child = $child"99wait $child100 101# Be sure some other events will happen for small systems (e.g. 1 core)102other_task103 104echo 0 > tracing_on105 106cnt=`count_pid $mypid`107if [ $cnt -ne 0 ]; then108 fail "Filtered out task has events"109fi110 111cnt=`count_pid $child`112if [ $cnt -ne 0 ]; then113 fail "Child of filtered out taskhas events"114fi115 116cnt=`count_no_pid $mypid`117if [ $cnt -eq 0 ]; then118 fail "No other events were recorded"119fi120 121do_reset122 123exit 0124