cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

main.sh (3584B)


      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