Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/testing/selftests/cpufreq/main.sh
26302 views
1
#!/bin/bash
2
# SPDX-License-Identifier: GPL-2.0
3
4
source cpu.sh
5
source cpufreq.sh
6
source governor.sh
7
source module.sh
8
source special-tests.sh
9
10
DIR="$(dirname $(readlink -f "$0"))"
11
source "${DIR}"/../kselftest/ktap_helpers.sh
12
13
FUNC=basic # do basic tests by default
14
OUTFILE=cpufreq_selftest
15
SYSFS=
16
CPUROOT=
17
CPUFREQROOT=
18
19
helpme()
20
{
21
printf "Usage: $0 [-h] [-todg args]
22
[-h <help>]
23
[-o <output-file-for-dump>]
24
[-t <basic: Basic cpufreq testing
25
suspend: suspend/resume,
26
hibernate: hibernate/resume,
27
suspend_rtc: suspend/resume back using the RTC wakeup alarm,
28
hibernate_rtc: hibernate/resume back using the RTC wakeup alarm,
29
modtest: test driver or governor modules. Only to be used with -d or -g options,
30
sptest1: Simple governor switch to produce lockdep.
31
sptest2: Concurrent governor switch to produce lockdep.
32
sptest3: Governor races, shuffle between governors quickly.
33
sptest4: CPU hotplugs with updates to cpufreq files.>]
34
[-d <driver's module name: only with \"-t modtest>\"]
35
[-g <governor's module name: only with \"-t modtest>\"]
36
\n"
37
exit "${KSFT_FAIL}"
38
}
39
40
prerequisite()
41
{
42
msg="skip all tests:"
43
44
if [ $UID != 0 ]; then
45
ktap_skip_all "$msg must be run as root"
46
exit "${KSFT_SKIP}"
47
fi
48
49
taskset -p 01 $$
50
51
SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
52
53
if [ ! -d "$SYSFS" ]; then
54
ktap_skip_all "$msg sysfs is not mounted"
55
exit "${KSFT_SKIP}"
56
fi
57
58
CPUROOT=$SYSFS/devices/system/cpu
59
CPUFREQROOT="$CPUROOT/cpufreq"
60
61
if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then
62
ktap_skip_all "$msg cpus not available in sysfs"
63
exit "${KSFT_SKIP}"
64
fi
65
66
if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then
67
ktap_skip_all "$msg cpufreq directory not available in sysfs"
68
exit "${KSFT_SKIP}"
69
fi
70
}
71
72
parse_arguments()
73
{
74
while getopts ht:o:d:g: arg
75
do
76
case $arg in
77
h) # --help
78
helpme
79
;;
80
81
t) # --func_type (Function to perform: basic, suspend, hibernate,
82
# suspend_rtc, hibernate_rtc, modtest, sptest1/2/3/4 (default: basic))
83
FUNC=$OPTARG
84
;;
85
86
o) # --output-file (Output file to store dumps)
87
OUTFILE=$OPTARG
88
;;
89
90
d) # --driver-mod-name (Name of the driver module)
91
DRIVER_MOD=$OPTARG
92
;;
93
94
g) # --governor-mod-name (Name of the governor module)
95
GOVERNOR_MOD=$OPTARG
96
;;
97
98
\?)
99
helpme
100
;;
101
esac
102
done
103
}
104
105
do_test()
106
{
107
# Check if CPUs are managed by cpufreq or not
108
count=$(count_cpufreq_managed_cpus)
109
110
if [ $count = 0 -a $FUNC != "modtest" ]; then
111
ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
112
fi
113
114
case "$FUNC" in
115
"basic")
116
cpufreq_basic_tests
117
;;
118
119
"suspend")
120
do_suspend "suspend" 1
121
;;
122
123
"hibernate")
124
do_suspend "hibernate" 1
125
;;
126
127
"suspend_rtc")
128
do_suspend "suspend" 1 rtc
129
;;
130
131
"hibernate_rtc")
132
do_suspend "hibernate" 1 rtc
133
;;
134
135
"modtest")
136
# Do we have modules in place?
137
if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then
138
ktap_exit_fail_msg "No driver or governor module passed with -d or -g"
139
fi
140
141
if [ $DRIVER_MOD ]; then
142
if [ $GOVERNOR_MOD ]; then
143
module_test $DRIVER_MOD $GOVERNOR_MOD
144
else
145
module_driver_test $DRIVER_MOD
146
fi
147
else
148
if [ $count = 0 ]; then
149
ktap_exit_fail_msg "No cpu is managed by cpufreq core, exiting"
150
fi
151
152
module_governor_test $GOVERNOR_MOD
153
fi
154
;;
155
156
"sptest1")
157
simple_lockdep
158
;;
159
160
"sptest2")
161
concurrent_lockdep
162
;;
163
164
"sptest3")
165
governor_race
166
;;
167
168
"sptest4")
169
hotplug_with_updates
170
;;
171
172
*)
173
ktap_print_msg "Invalid [-f] function type"
174
helpme
175
;;
176
esac
177
}
178
179
# clear dumps
180
# $1: file name
181
clear_dumps()
182
{
183
echo "" > $1.txt
184
echo "" > $1.dmesg_cpufreq.txt
185
echo "" > $1.dmesg_full.txt
186
}
187
188
# $1: output file name
189
dmesg_dumps()
190
{
191
dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt
192
193
# We may need the full logs as well
194
dmesg >> $1.dmesg_full.txt
195
}
196
197
ktap_print_header
198
199
# Parse arguments
200
parse_arguments $@
201
202
ktap_set_plan 1
203
204
# Make sure all requirements are met
205
prerequisite
206
207
# Run requested functions
208
clear_dumps $OUTFILE
209
do_test | tee -a $OUTFILE.txt
210
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
211
exit ${PIPESTATUS[0]};
212
fi
213
dmesg_dumps $OUTFILE
214
215
ktap_test_pass "Completed successfully"
216
217
ktap_print_totals
218
exit "${KSFT_PASS}"
219
220