1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3# description: event tracing - enable/disable with module event
4# requires: set_event "Can enable module events via: :mod:":README
5# flags: instance
6
7rmmod trace-events-sample ||:
8if ! modprobe trace-events-sample ; then
9  echo "No trace-events sample module - please make CONFIG_SAMPLE_TRACE_EVENTS=m"
10  exit_unresolved;
11fi
12trap "rmmod trace-events-sample" EXIT
13
14# Set events for the module
15echo ":mod:trace-events-sample" > set_event
16
17test_all_enabled() {
18
19	# Check if more than one is enabled
20	grep -q sample-trace:foo_bar set_event
21	grep -q sample-trace:foo_bar_with_cond set_event
22	grep -q sample-trace:foo_bar_with_fn set_event
23
24	# All of them should be enabled. Check via the enable file
25	val=`cat events/sample-trace/enable`
26	if [ $val -ne 1 ]; then
27		exit_fail
28	fi
29}
30
31clear_events() {
32	echo > set_event
33	val=`cat events/enable`
34	if [ "$val" != "0" ]; then
35		exit_fail
36	fi
37	count=`cat set_event | wc -l`
38	if [ $count -ne 0 ]; then
39		exit_fail
40	fi
41}
42
43test_all_enabled
44
45echo clear all events
46echo 0 > events/enable
47
48echo Confirm the events are disabled
49val=`cat events/sample-trace/enable`
50if [ $val -ne 0 ]; then
51	exit_fail
52fi
53
54echo And the set_event file is empty
55
56cnt=`wc -l set_event`
57if [ $cnt -ne 0 ]; then
58	exit_fail
59fi
60
61echo now enable all events
62echo 1 > events/enable
63
64echo Confirm the events are enabled again
65val=`cat events/sample-trace/enable`
66if [ $val -ne 1 ]; then
67	exit_fail
68fi
69
70echo disable just the module events
71echo '!:mod:trace-events-sample' >> set_event
72
73echo Should have mix of events enabled
74val=`cat events/enable`
75if [ "$val" != "X" ]; then
76	exit_fail
77fi
78
79echo Confirm the module events are disabled
80val=`cat events/sample-trace/enable`
81if [ $val -ne 0 ]; then
82	exit_fail
83fi
84
85echo 0 > events/enable
86
87echo now enable the system events
88echo 'sample-trace:mod:trace-events-sample' > set_event
89
90test_all_enabled
91
92echo clear all events
93echo 0 > events/enable
94
95echo Confirm the events are disabled
96val=`cat events/sample-trace/enable`
97if [ $val -ne 0 ]; then
98	exit_fail
99fi
100
101echo Test enabling foo_bar only
102echo 'foo_bar:mod:trace-events-sample' > set_event
103
104grep -q sample-trace:foo_bar set_event
105
106echo make sure nothing is found besides foo_bar
107if grep -q -v sample-trace:foo_bar set_event ; then
108	exit_fail
109fi
110
111echo Append another using the system and event name
112echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event
113
114grep -q sample-trace:foo_bar set_event
115grep -q sample-trace:foo_bar_with_cond set_event
116
117count=`cat set_event | wc -l`
118
119if [ $count -ne 2 ]; then
120	exit_fail
121fi
122
123clear_events
124
125rmmod trace-events-sample
126
127echo ':mod:trace-events-sample' > set_event
128
129echo make sure that the module shows up, and '-' is converted to '_'
130grep -q '\*:\*:mod:trace_events_sample' set_event
131
132modprobe trace-events-sample
133
134test_all_enabled
135
136clear_events
137
138rmmod trace-events-sample
139
140echo Enable just the system events
141echo 'sample-trace:mod:trace-events-sample' > set_event
142grep -q 'sample-trace:mod:trace_events_sample' set_event
143
144modprobe trace-events-sample
145
146test_all_enabled
147
148clear_events
149
150rmmod trace-events-sample
151
152echo Enable event with just event name
153echo 'foo_bar:mod:trace-events-sample' > set_event
154grep -q 'foo_bar:mod:trace_events_sample' set_event
155
156echo Enable another event with both system and event name
157echo 'sample-trace:foo_bar_with_cond:mod:trace-events-sample' >> set_event
158grep -q 'sample-trace:foo_bar_with_cond:mod:trace_events_sample' set_event
159echo Make sure the other event was still there
160grep -q 'foo_bar:mod:trace_events_sample' set_event
161
162modprobe trace-events-sample
163
164echo There should be no :mod: cached events
165if grep -q ':mod:' set_event; then
166	exit_fail
167fi
168
169echo two events should be enabled
170count=`cat set_event | wc -l`
171if [ $count -ne 2 ]; then
172	exit_fail
173fi
174
175echo only two events should be enabled
176val=`cat events/sample-trace/enable`
177if [ "$val" != "X" ]; then
178	exit_fail
179fi
180
181val=`cat events/sample-trace/foo_bar/enable`
182if [ "$val" != "1" ]; then
183	exit_fail
184fi
185
186val=`cat events/sample-trace/foo_bar_with_cond/enable`
187if [ "$val" != "1" ]; then
188	exit_fail
189fi
190
191clear_trace
192