File Index
Files and directories
Sign in
FILE

main.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/cpufreq/main.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3
  4source cpu.sh
  5source cpufreq.sh
  6source governor.sh
  7source module.sh
  8source special-tests.sh
  9
 10DIR="$(dirname $(readlink -f "$0"))"
 11source "${DIR}"/../kselftest/ktap_helpers.sh
 12
 13FUNC=basic	# do basic tests by default
 14OUTFILE=cpufreq_selftest
 15SYSFS=
 16CPUROOT=
 17CPUFREQROOT=
 18
 19helpme()
 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
 40prerequisite()
 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
 72parse_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
105do_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
181clear_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
189dmesg_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
197ktap_print_header
198
199# Parse arguments
200parse_arguments $@
201
202ktap_set_plan 1
203
204# Make sure all requirements are met
205prerequisite
206
207# Run requested functions
208clear_dumps $OUTFILE
209do_test | tee -a $OUTFILE.txt
210if [ "${PIPESTATUS[0]}" -ne 0 ]; then
211    exit ${PIPESTATUS[0]};
212fi
213dmesg_dumps $OUTFILE
214
215ktap_test_pass "Completed successfully"
216
217ktap_print_totals
218exit "${KSFT_PASS}"
~/ Read-only file preview.