123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- #
- # Test governors
- # protect against multiple inclusion
- if [ $FILE_GOVERNOR ]; then
- return 0
- else
- FILE_GOVERNOR=DONE
- fi
- source cpu.sh
- source cpufreq.sh
- CUR_GOV=
- CUR_FREQ=
- # Find governor's directory path
- # $1: policy, $2: governor
- find_gov_directory()
- {
- if [ -d $CPUFREQROOT/$2 ]; then
- printf "$CPUFREQROOT/$2\n"
- elif [ -d $CPUFREQROOT/$1/$2 ]; then
- printf "$CPUFREQROOT/$1/$2\n"
- else
- printf "INVALID\n"
- fi
- }
- # $1: policy
- find_current_governor()
- {
- cat $CPUFREQROOT/$1/scaling_governor
- }
- # $1: policy
- backup_governor()
- {
- CUR_GOV=$(find_current_governor $1)
- printf "Governor backup done for $1: $CUR_GOV\n"
- if [ $CUR_GOV == "userspace" ]; then
- CUR_FREQ=$(find_current_freq $1)
- printf "Governor frequency backup done for $1: $CUR_FREQ\n"
- fi
- printf "\n"
- }
- # $1: policy
- restore_governor()
- {
- __switch_governor $1 $CUR_GOV
- printf "Governor restored for $1 to $CUR_GOV\n"
- if [ $CUR_GOV == "userspace" ]; then
- set_cpu_frequency $1 $CUR_FREQ
- printf "Governor frequency restored for $1: $CUR_FREQ\n"
- fi
- printf "\n"
- }
- # param:
- # $1: policy, $2: governor
- __switch_governor()
- {
- echo $2 > $CPUFREQROOT/$1/scaling_governor
- }
- # param:
- # $1: cpu, $2: governor
- __switch_governor_for_cpu()
- {
- echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
- }
- # SWITCH GOVERNORS
- # $1: cpu, $2: governor
- switch_governor()
- {
- local filepath=$CPUFREQROOT/$1/scaling_available_governors
- # check if governor is available
- local found=$(cat $filepath | grep $2 | wc -l)
- if [ $found = 0 ]; then
- echo 1;
- return
- fi
- __switch_governor $1 $2
- echo 0;
- }
- # $1: policy, $2: governor
- switch_show_governor()
- {
- cur_gov=find_current_governor
- if [ $cur_gov == "userspace" ]; then
- cur_freq=find_current_freq
- fi
- # switch governor
- __switch_governor $1 $2
- printf "\nSwitched governor for $1 to $2\n\n"
- if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then
- printf "No files to read for $2 governor\n\n"
- return
- fi
- # show governor files
- local govpath=$(find_gov_directory $1 $2)
- read_cpufreq_files_in_dir $govpath
- }
- # $1: function to be called, $2: policy
- call_for_each_governor()
- {
- local filepath=$CPUFREQROOT/$2/scaling_available_governors
- # Exit if cpu isn't managed by cpufreq core
- if [ ! -f $filepath ]; then
- return;
- fi
- backup_governor $2
- local governors=$(cat $filepath)
- printf "Available governors for $2: $governors\n"
- for governor in $governors; do
- $1 $2 $governor
- done
- restore_governor $2
- }
- # $1: loop count
- shuffle_governors_for_all_cpus()
- {
- printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
- for i in `seq 1 $1`; do
- for_each_policy call_for_each_governor switch_show_governor
- done
- printf "%s\n\n" "------------------------------------------------"
- }
|