Linux Audio

Check our new training course

Real-Time Linux with PREEMPT_RT training

Feb 18-20, 2025
Register
Loading...
Note: File does not exist in v4.10.11.
  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
 10FUNC=basic	# do basic tests by default
 11OUTFILE=cpufreq_selftest
 12SYSFS=
 13CPUROOT=
 14CPUFREQROOT=
 15
 16# Kselftest framework requirement - SKIP code is 4.
 17ksft_skip=4
 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	     modtest: test driver or governor modules. Only to be used with -d or -g options,
 28	     sptest1: Simple governor switch to produce lockdep.
 29	     sptest2: Concurrent governor switch to produce lockdep.
 30	     sptest3: Governor races, shuffle between governors quickly.
 31	     sptest4: CPU hotplugs with updates to cpufreq files.>]
 32	[-d <driver's module name: only with \"-t modtest>\"]
 33	[-g <governor's module name: only with \"-t modtest>\"]
 34	\n"
 35	exit 2
 36}
 37
 38prerequisite()
 39{
 40	msg="skip all tests:"
 41
 42	if [ $UID != 0 ]; then
 43		echo $msg must be run as root >&2
 44		exit $ksft_skip
 45	fi
 46
 47	taskset -p 01 $$
 48
 49	SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
 50
 51	if [ ! -d "$SYSFS" ]; then
 52		echo $msg sysfs is not mounted >&2
 53		exit 2
 54	fi
 55
 56	CPUROOT=$SYSFS/devices/system/cpu
 57	CPUFREQROOT="$CPUROOT/cpufreq"
 58
 59	if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then
 60		echo $msg cpus not available in sysfs >&2
 61		exit 2
 62	fi
 63
 64	if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then
 65		echo $msg cpufreq directory not available in sysfs >&2
 66		exit 2
 67	fi
 68}
 69
 70parse_arguments()
 71{
 72	while getopts ht:o:d:g: arg
 73	do
 74		case $arg in
 75			h) # --help
 76				helpme
 77				;;
 78
 79			t) # --func_type (Function to perform: basic, suspend, hibernate, modtest, sptest1/2/3/4 (default: basic))
 80				FUNC=$OPTARG
 81				;;
 82
 83			o) # --output-file (Output file to store dumps)
 84				OUTFILE=$OPTARG
 85				;;
 86
 87			d) # --driver-mod-name (Name of the driver module)
 88				DRIVER_MOD=$OPTARG
 89				;;
 90
 91			g) # --governor-mod-name (Name of the governor module)
 92				GOVERNOR_MOD=$OPTARG
 93				;;
 94
 95			\?)
 96				helpme
 97				;;
 98		esac
 99	done
100}
101
102do_test()
103{
104	# Check if CPUs are managed by cpufreq or not
105	count=$(count_cpufreq_managed_cpus)
106
107	if [ $count = 0 -a $FUNC != "modtest" ]; then
108		echo "No cpu is managed by cpufreq core, exiting"
109		exit 2;
110	fi
111
112	case "$FUNC" in
113		"basic")
114		cpufreq_basic_tests
115		;;
116
117		"suspend")
118		do_suspend "suspend" 1
119		;;
120
121		"hibernate")
122		do_suspend "hibernate" 1
123		;;
124
125		"modtest")
126		# Do we have modules in place?
127		if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then
128			echo "No driver or governor module passed with -d or -g"
129			exit 2;
130		fi
131
132		if [ $DRIVER_MOD ]; then
133			if [ $GOVERNOR_MOD ]; then
134				module_test $DRIVER_MOD $GOVERNOR_MOD
135			else
136				module_driver_test $DRIVER_MOD
137			fi
138		else
139			if [ $count = 0 ]; then
140				echo "No cpu is managed by cpufreq core, exiting"
141				exit 2;
142			fi
143
144			module_governor_test $GOVERNOR_MOD
145		fi
146		;;
147
148		"sptest1")
149		simple_lockdep
150		;;
151
152		"sptest2")
153		concurrent_lockdep
154		;;
155
156		"sptest3")
157		governor_race
158		;;
159
160		"sptest4")
161		hotplug_with_updates
162		;;
163
164		*)
165		echo "Invalid [-f] function type"
166		helpme
167		;;
168	esac
169}
170
171# clear dumps
172# $1: file name
173clear_dumps()
174{
175	echo "" > $1.txt
176	echo "" > $1.dmesg_cpufreq.txt
177	echo "" > $1.dmesg_full.txt
178}
179
180# $1: output file name
181dmesg_dumps()
182{
183	dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt
184
185	# We may need the full logs as well
186	dmesg >> $1.dmesg_full.txt
187}
188
189# Parse arguments
190parse_arguments $@
191
192# Make sure all requirements are met
193prerequisite
194
195# Run requested functions
196clear_dumps $OUTFILE
197do_test | tee -a $OUTFILE.txt
198dmesg_dumps $OUTFILE