mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
3.5 KiB
198 lines
3.5 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0 |
|
|
|
source cpu.sh |
|
source cpufreq.sh |
|
source governor.sh |
|
source module.sh |
|
source special-tests.sh |
|
|
|
FUNC=basic # do basic tests by default |
|
OUTFILE=cpufreq_selftest |
|
SYSFS= |
|
CPUROOT= |
|
CPUFREQROOT= |
|
|
|
# Kselftest framework requirement - SKIP code is 4. |
|
ksft_skip=4 |
|
|
|
helpme() |
|
{ |
|
printf "Usage: $0 [-h] [-todg args] |
|
[-h <help>] |
|
[-o <output-file-for-dump>] |
|
[-t <basic: Basic cpufreq testing |
|
suspend: suspend/resume, |
|
hibernate: hibernate/resume, |
|
modtest: test driver or governor modules. Only to be used with -d or -g options, |
|
sptest1: Simple governor switch to produce lockdep. |
|
sptest2: Concurrent governor switch to produce lockdep. |
|
sptest3: Governor races, shuffle between governors quickly. |
|
sptest4: CPU hotplugs with updates to cpufreq files.>] |
|
[-d <driver's module name: only with \"-t modtest>\"] |
|
[-g <governor's module name: only with \"-t modtest>\"] |
|
\n" |
|
exit 2 |
|
} |
|
|
|
prerequisite() |
|
{ |
|
msg="skip all tests:" |
|
|
|
if [ $UID != 0 ]; then |
|
echo $msg must be run as root >&2 |
|
exit $ksft_skip |
|
fi |
|
|
|
taskset -p 01 $$ |
|
|
|
SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'` |
|
|
|
if [ ! -d "$SYSFS" ]; then |
|
echo $msg sysfs is not mounted >&2 |
|
exit 2 |
|
fi |
|
|
|
CPUROOT=$SYSFS/devices/system/cpu |
|
CPUFREQROOT="$CPUROOT/cpufreq" |
|
|
|
if ! ls $CPUROOT/cpu* > /dev/null 2>&1; then |
|
echo $msg cpus not available in sysfs >&2 |
|
exit 2 |
|
fi |
|
|
|
if ! ls $CPUROOT/cpufreq > /dev/null 2>&1; then |
|
echo $msg cpufreq directory not available in sysfs >&2 |
|
exit 2 |
|
fi |
|
} |
|
|
|
parse_arguments() |
|
{ |
|
while getopts ht:o:d:g: arg |
|
do |
|
case $arg in |
|
h) # --help |
|
helpme |
|
;; |
|
|
|
t) # --func_type (Function to perform: basic, suspend, hibernate, modtest, sptest1/2/3/4 (default: basic)) |
|
FUNC=$OPTARG |
|
;; |
|
|
|
o) # --output-file (Output file to store dumps) |
|
OUTFILE=$OPTARG |
|
;; |
|
|
|
d) # --driver-mod-name (Name of the driver module) |
|
DRIVER_MOD=$OPTARG |
|
;; |
|
|
|
g) # --governor-mod-name (Name of the governor module) |
|
GOVERNOR_MOD=$OPTARG |
|
;; |
|
|
|
\?) |
|
helpme |
|
;; |
|
esac |
|
done |
|
} |
|
|
|
do_test() |
|
{ |
|
# Check if CPUs are managed by cpufreq or not |
|
count=$(count_cpufreq_managed_cpus) |
|
|
|
if [ $count = 0 -a $FUNC != "modtest" ]; then |
|
echo "No cpu is managed by cpufreq core, exiting" |
|
exit 2; |
|
fi |
|
|
|
case "$FUNC" in |
|
"basic") |
|
cpufreq_basic_tests |
|
;; |
|
|
|
"suspend") |
|
do_suspend "suspend" 1 |
|
;; |
|
|
|
"hibernate") |
|
do_suspend "hibernate" 1 |
|
;; |
|
|
|
"modtest") |
|
# Do we have modules in place? |
|
if [ -z $DRIVER_MOD ] && [ -z $GOVERNOR_MOD ]; then |
|
echo "No driver or governor module passed with -d or -g" |
|
exit 2; |
|
fi |
|
|
|
if [ $DRIVER_MOD ]; then |
|
if [ $GOVERNOR_MOD ]; then |
|
module_test $DRIVER_MOD $GOVERNOR_MOD |
|
else |
|
module_driver_test $DRIVER_MOD |
|
fi |
|
else |
|
if [ $count = 0 ]; then |
|
echo "No cpu is managed by cpufreq core, exiting" |
|
exit 2; |
|
fi |
|
|
|
module_governor_test $GOVERNOR_MOD |
|
fi |
|
;; |
|
|
|
"sptest1") |
|
simple_lockdep |
|
;; |
|
|
|
"sptest2") |
|
concurrent_lockdep |
|
;; |
|
|
|
"sptest3") |
|
governor_race |
|
;; |
|
|
|
"sptest4") |
|
hotplug_with_updates |
|
;; |
|
|
|
*) |
|
echo "Invalid [-f] function type" |
|
helpme |
|
;; |
|
esac |
|
} |
|
|
|
# clear dumps |
|
# $1: file name |
|
clear_dumps() |
|
{ |
|
echo "" > $1.txt |
|
echo "" > $1.dmesg_cpufreq.txt |
|
echo "" > $1.dmesg_full.txt |
|
} |
|
|
|
# $1: output file name |
|
dmesg_dumps() |
|
{ |
|
dmesg | grep cpufreq >> $1.dmesg_cpufreq.txt |
|
|
|
# We may need the full logs as well |
|
dmesg >> $1.dmesg_full.txt |
|
} |
|
|
|
# Parse arguments |
|
parse_arguments $@ |
|
|
|
# Make sure all requirements are met |
|
prerequisite |
|
|
|
# Run requested functions |
|
clear_dumps $OUTFILE |
|
do_test >> $OUTFILE.txt |
|
dmesg_dumps $OUTFILE
|
|
|