xref: /linux/tools/testing/selftests/ftrace/test.d/event/subsystem-enable.tc (revision 352af6a011d586ff042db4b2d1f7421875eb8a14)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: event tracing - enable/disable with subsystem level files
4# requires: set_event events/sched/enable
5# flags: instance
6
7do_reset() {
8    echo > set_event
9    clear_trace
10}
11
12fail() { #msg
13    echo $1
14    exit_fail
15}
16
17# As reading trace can last forever, simply look for 3 different
18# events then exit out of reading the file. If there's not 3 different
19# events, then the test has failed.
20check_unique() {
21    cat trace | grep -v '^#' | awk '
22	BEGIN { cnt = 0; }
23	{
24	    for (i = 0; i < cnt; i++) {
25		if (event[i] == $5) {
26		    break;
27		}
28	    }
29	    if (i == cnt) {
30		event[cnt++] = $5;
31		if (cnt > 2) {
32		    exit;
33		}
34	    }
35	}
36	END {
37	    printf "%d", cnt;
38	}'
39}
40
41echo 'sched:*' > set_event
42
43yield
44
45count=`check_unique`
46if [ $count -lt 3 ]; then
47    fail "at least fork, exec and exit events should be recorded"
48fi
49
50do_reset
51
52echo 1 > events/sched/enable
53
54yield
55
56count=`check_unique`
57if [ $count -lt 3 ]; then
58    fail "at least fork, exec and exit events should be recorded"
59fi
60
61do_reset
62
63echo 0 > events/sched/enable
64
65yield
66
67count=`head -n 100 trace | grep -v ^# | awk '{ print $5 }' | sort -u | wc -l`
68if [ $count -ne 0 ]; then
69    fail "any of scheduler events should not be recorded"
70fi
71
72exit 0
73