Loading...
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Modules specific tests cases
5
6# protect against multiple inclusion
7if [ $FILE_MODULE ]; then
8 return 0
9else
10 FILE_MODULE=DONE
11fi
12
13source cpu.sh
14source cpufreq.sh
15source governor.sh
16
17# Check basic insmod/rmmod
18# $1: module
19test_basic_insmod_rmmod()
20{
21 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
22
23 printf "Inserting $1 module\n"
24 # insert module
25 insmod $1
26 if [ $? != 0 ]; then
27 printf "Insmod $1 failed\n"
28 exit;
29 fi
30
31 printf "Removing $1 module\n"
32 # remove module
33 rmmod $1
34 if [ $? != 0 ]; then
35 printf "rmmod $1 failed\n"
36 exit;
37 fi
38
39 printf "\n"
40}
41
42# Insert cpufreq driver module and perform basic tests
43# $1: cpufreq-driver module to insert
44# $2: If we want to play with CPUs (1) or not (0)
45module_driver_test_single()
46{
47 printf "** Test: Running ${FUNCNAME[0]} for driver $1 and cpus_hotplug=$2 **\n\n"
48
49 if [ $2 -eq 1 ]; then
50 # offline all non-boot CPUs
51 for_each_non_boot_cpu offline_cpu
52 printf "\n"
53 fi
54
55 # insert module
56 printf "Inserting $1 module\n\n"
57 insmod $1
58 if [ $? != 0 ]; then
59 printf "Insmod $1 failed\n"
60 return;
61 fi
62
63 if [ $2 -eq 1 ]; then
64 # online all non-boot CPUs
65 for_each_non_boot_cpu online_cpu
66 printf "\n"
67 fi
68
69 # run basic tests
70 cpufreq_basic_tests
71
72 # remove module
73 printf "Removing $1 module\n\n"
74 rmmod $1
75 if [ $? != 0 ]; then
76 printf "rmmod $1 failed\n"
77 return;
78 fi
79
80 # There shouldn't be any cpufreq directories now.
81 for_each_cpu cpu_should_not_have_cpufreq_directory
82 printf "\n"
83}
84
85# $1: cpufreq-driver module to insert
86module_driver_test()
87{
88 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
89
90 # check if module is present or not
91 ls $1 > /dev/null
92 if [ $? != 0 ]; then
93 printf "$1: not present in `pwd` folder\n"
94 return;
95 fi
96
97 # test basic module tests
98 test_basic_insmod_rmmod $1
99
100 # Do simple module test
101 module_driver_test_single $1 0
102
103 # Remove CPUs before inserting module and then bring them back
104 module_driver_test_single $1 1
105 printf "\n"
106}
107
108# find governor name based on governor module name
109# $1: governor module name
110find_gov_name()
111{
112 if [ $1 = "cpufreq_ondemand.ko" ]; then
113 printf "ondemand"
114 elif [ $1 = "cpufreq_conservative.ko" ]; then
115 printf "conservative"
116 elif [ $1 = "cpufreq_userspace.ko" ]; then
117 printf "userspace"
118 elif [ $1 = "cpufreq_performance.ko" ]; then
119 printf "performance"
120 elif [ $1 = "cpufreq_powersave.ko" ]; then
121 printf "powersave"
122 elif [ $1 = "cpufreq_schedutil.ko" ]; then
123 printf "schedutil"
124 fi
125}
126
127# $1: governor string, $2: governor module, $3: policy
128# example: module_governor_test_single "ondemand" "cpufreq_ondemand.ko" 2
129module_governor_test_single()
130{
131 printf "** Test: Running ${FUNCNAME[0]} for $3 **\n\n"
132
133 backup_governor $3
134
135 # switch to new governor
136 printf "Switch from $CUR_GOV to $1\n"
137 switch_show_governor $3 $1
138
139 # try removing module, it should fail as governor is used
140 printf "Removing $2 module\n\n"
141 rmmod $2
142 if [ $? = 0 ]; then
143 printf "WARN: rmmod $2 succeeded even if governor is used\n"
144 insmod $2
145 else
146 printf "Pass: unable to remove $2 while it is being used\n\n"
147 fi
148
149 # switch back to old governor
150 printf "Switchback to $CUR_GOV from $1\n"
151 restore_governor $3
152 printf "\n"
153}
154
155# Insert cpufreq governor module and perform basic tests
156# $1: cpufreq-governor module to insert
157module_governor_test()
158{
159 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
160
161 # check if module is present or not
162 ls $1 > /dev/null
163 if [ $? != 0 ]; then
164 printf "$1: not present in `pwd` folder\n"
165 return;
166 fi
167
168 # test basic module tests
169 test_basic_insmod_rmmod $1
170
171 # insert module
172 printf "Inserting $1 module\n\n"
173 insmod $1
174 if [ $? != 0 ]; then
175 printf "Insmod $1 failed\n"
176 return;
177 fi
178
179 # switch to new governor for each cpu
180 for_each_policy module_governor_test_single $(find_gov_name $1) $1
181
182 # remove module
183 printf "Removing $1 module\n\n"
184 rmmod $1
185 if [ $? != 0 ]; then
186 printf "rmmod $1 failed\n"
187 return;
188 fi
189 printf "\n"
190}
191
192# test modules: driver and governor
193# $1: driver module, $2: governor module
194module_test()
195{
196 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
197
198 # check if modules are present or not
199 ls $1 $2 > /dev/null
200 if [ $? != 0 ]; then
201 printf "$1 or $2: is not present in `pwd` folder\n"
202 return;
203 fi
204
205 # TEST1: Insert gov after driver
206 # insert driver module
207 printf "Inserting $1 module\n\n"
208 insmod $1
209 if [ $? != 0 ]; then
210 printf "Insmod $1 failed\n"
211 return;
212 fi
213
214 # run governor tests
215 module_governor_test $2
216
217 # remove driver module
218 printf "Removing $1 module\n\n"
219 rmmod $1
220 if [ $? != 0 ]; then
221 printf "rmmod $1 failed\n"
222 return;
223 fi
224
225 # TEST2: Insert driver after governor
226 # insert governor module
227 printf "Inserting $2 module\n\n"
228 insmod $2
229 if [ $? != 0 ]; then
230 printf "Insmod $2 failed\n"
231 return;
232 fi
233
234 # run governor tests
235 module_driver_test $1
236
237 # remove driver module
238 printf "Removing $2 module\n\n"
239 rmmod $2
240 if [ $? != 0 ]; then
241 printf "rmmod $2 failed\n"
242 return;
243 fi
244}
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Modules specific tests cases
5
6# protect against multiple inclusion
7if [ $FILE_MODULE ]; then
8 return 0
9else
10 FILE_MODULE=DONE
11fi
12
13source cpu.sh
14source cpufreq.sh
15source governor.sh
16
17# Check basic insmod/rmmod
18# $1: module
19test_basic_insmod_rmmod()
20{
21 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
22
23 printf "Inserting $1 module\n"
24 # insert module
25 insmod $1
26 if [ $? != 0 ]; then
27 ktap_exit_fail_msg "Insmod $1 failed\n"
28 fi
29
30 printf "Removing $1 module\n"
31 # remove module
32 rmmod $1
33 if [ $? != 0 ]; then
34 ktap_exit_fail_msg "rmmod $1 failed\n"
35 fi
36
37 printf "\n"
38}
39
40# Insert cpufreq driver module and perform basic tests
41# $1: cpufreq-driver module to insert
42# $2: If we want to play with CPUs (1) or not (0)
43module_driver_test_single()
44{
45 printf "** Test: Running ${FUNCNAME[0]} for driver $1 and cpus_hotplug=$2 **\n\n"
46
47 if [ $2 -eq 1 ]; then
48 # offline all non-boot CPUs
49 for_each_non_boot_cpu offline_cpu
50 printf "\n"
51 fi
52
53 # insert module
54 printf "Inserting $1 module\n\n"
55 insmod $1
56 if [ $? != 0 ]; then
57 printf "Insmod $1 failed\n"
58 return;
59 fi
60
61 if [ $2 -eq 1 ]; then
62 # online all non-boot CPUs
63 for_each_non_boot_cpu online_cpu
64 printf "\n"
65 fi
66
67 # run basic tests
68 cpufreq_basic_tests
69
70 # remove module
71 printf "Removing $1 module\n\n"
72 rmmod $1
73 if [ $? != 0 ]; then
74 printf "rmmod $1 failed\n"
75 return;
76 fi
77
78 # There shouldn't be any cpufreq directories now.
79 for_each_cpu cpu_should_not_have_cpufreq_directory
80 printf "\n"
81}
82
83# $1: cpufreq-driver module to insert
84module_driver_test()
85{
86 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
87
88 # check if module is present or not
89 ls $1 > /dev/null
90 if [ $? != 0 ]; then
91 printf "$1: not present in `pwd` folder\n"
92 return;
93 fi
94
95 # test basic module tests
96 test_basic_insmod_rmmod $1
97
98 # Do simple module test
99 module_driver_test_single $1 0
100
101 # Remove CPUs before inserting module and then bring them back
102 module_driver_test_single $1 1
103 printf "\n"
104}
105
106# find governor name based on governor module name
107# $1: governor module name
108find_gov_name()
109{
110 if [ $1 = "cpufreq_ondemand.ko" ]; then
111 printf "ondemand"
112 elif [ $1 = "cpufreq_conservative.ko" ]; then
113 printf "conservative"
114 elif [ $1 = "cpufreq_userspace.ko" ]; then
115 printf "userspace"
116 elif [ $1 = "cpufreq_performance.ko" ]; then
117 printf "performance"
118 elif [ $1 = "cpufreq_powersave.ko" ]; then
119 printf "powersave"
120 elif [ $1 = "cpufreq_schedutil.ko" ]; then
121 printf "schedutil"
122 fi
123}
124
125# $1: governor string, $2: governor module, $3: policy
126# example: module_governor_test_single "ondemand" "cpufreq_ondemand.ko" 2
127module_governor_test_single()
128{
129 printf "** Test: Running ${FUNCNAME[0]} for $3 **\n\n"
130
131 backup_governor $3
132
133 # switch to new governor
134 printf "Switch from $CUR_GOV to $1\n"
135 switch_show_governor $3 $1
136
137 # try removing module, it should fail as governor is used
138 printf "Removing $2 module\n\n"
139 rmmod $2
140 if [ $? = 0 ]; then
141 printf "WARN: rmmod $2 succeeded even if governor is used\n"
142 insmod $2
143 else
144 printf "Pass: unable to remove $2 while it is being used\n\n"
145 fi
146
147 # switch back to old governor
148 printf "Switchback to $CUR_GOV from $1\n"
149 restore_governor $3
150 printf "\n"
151}
152
153# Insert cpufreq governor module and perform basic tests
154# $1: cpufreq-governor module to insert
155module_governor_test()
156{
157 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
158
159 # check if module is present or not
160 ls $1 > /dev/null
161 if [ $? != 0 ]; then
162 printf "$1: not present in `pwd` folder\n"
163 return;
164 fi
165
166 # test basic module tests
167 test_basic_insmod_rmmod $1
168
169 # insert module
170 printf "Inserting $1 module\n\n"
171 insmod $1
172 if [ $? != 0 ]; then
173 printf "Insmod $1 failed\n"
174 return;
175 fi
176
177 # switch to new governor for each cpu
178 for_each_policy module_governor_test_single $(find_gov_name $1) $1
179
180 # remove module
181 printf "Removing $1 module\n\n"
182 rmmod $1
183 if [ $? != 0 ]; then
184 printf "rmmod $1 failed\n"
185 return;
186 fi
187 printf "\n"
188}
189
190# test modules: driver and governor
191# $1: driver module, $2: governor module
192module_test()
193{
194 printf "** Test: Running ${FUNCNAME[0]} **\n\n"
195
196 # check if modules are present or not
197 ls $1 $2 > /dev/null
198 if [ $? != 0 ]; then
199 printf "$1 or $2: is not present in `pwd` folder\n"
200 return;
201 fi
202
203 # TEST1: Insert gov after driver
204 # insert driver module
205 printf "Inserting $1 module\n\n"
206 insmod $1
207 if [ $? != 0 ]; then
208 printf "Insmod $1 failed\n"
209 return;
210 fi
211
212 # run governor tests
213 module_governor_test $2
214
215 # remove driver module
216 printf "Removing $1 module\n\n"
217 rmmod $1
218 if [ $? != 0 ]; then
219 printf "rmmod $1 failed\n"
220 return;
221 fi
222
223 # TEST2: Insert driver after governor
224 # insert governor module
225 printf "Inserting $2 module\n\n"
226 insmod $2
227 if [ $? != 0 ]; then
228 printf "Insmod $2 failed\n"
229 return;
230 fi
231
232 # run governor tests
233 module_driver_test $1
234
235 # remove driver module
236 printf "Removing $2 module\n\n"
237 rmmod $2
238 if [ $? != 0 ]; then
239 printf "rmmod $2 failed\n"
240 return;
241 fi
242}