Back to home page

OSCL-LXR

 
 

    


0001 #!/bin/bash
0002 # SPDX-License-Identifier: GPL-2.0
0003 #
0004 # Test governors
0005 
0006 # protect against multiple inclusion
0007 if [ $FILE_GOVERNOR ]; then
0008         return 0
0009 else
0010         FILE_GOVERNOR=DONE
0011 fi
0012 
0013 source cpu.sh
0014 source cpufreq.sh
0015 
0016 CUR_GOV=
0017 CUR_FREQ=
0018 
0019 # Find governor's directory path
0020 # $1: policy, $2: governor
0021 find_gov_directory()
0022 {
0023         if [ -d $CPUFREQROOT/$2 ]; then
0024                 printf "$CPUFREQROOT/$2\n"
0025         elif [ -d $CPUFREQROOT/$1/$2 ]; then
0026                 printf "$CPUFREQROOT/$1/$2\n"
0027         else
0028                 printf "INVALID\n"
0029         fi
0030 }
0031 
0032 # $1: policy
0033 find_current_governor()
0034 {
0035         cat $CPUFREQROOT/$1/scaling_governor
0036 }
0037 
0038 # $1: policy
0039 backup_governor()
0040 {
0041         CUR_GOV=$(find_current_governor $1)
0042 
0043         printf "Governor backup done for $1: $CUR_GOV\n"
0044 
0045         if [ $CUR_GOV == "userspace" ]; then
0046                 CUR_FREQ=$(find_current_freq $1)
0047                 printf "Governor frequency backup done for $1: $CUR_FREQ\n"
0048         fi
0049 
0050         printf "\n"
0051 }
0052 
0053 # $1: policy
0054 restore_governor()
0055 {
0056         __switch_governor $1 $CUR_GOV
0057 
0058         printf "Governor restored for $1 to $CUR_GOV\n"
0059 
0060         if [ $CUR_GOV == "userspace" ]; then
0061                 set_cpu_frequency $1 $CUR_FREQ
0062                 printf "Governor frequency restored for $1: $CUR_FREQ\n"
0063         fi
0064 
0065         printf "\n"
0066 }
0067 
0068 # param:
0069 # $1: policy, $2: governor
0070 __switch_governor()
0071 {
0072         echo $2 > $CPUFREQROOT/$1/scaling_governor
0073 }
0074 
0075 # param:
0076 # $1: cpu, $2: governor
0077 __switch_governor_for_cpu()
0078 {
0079         echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
0080 }
0081 
0082 # SWITCH GOVERNORS
0083 
0084 # $1: cpu, $2: governor
0085 switch_governor()
0086 {
0087         local filepath=$CPUFREQROOT/$1/scaling_available_governors
0088 
0089         # check if governor is available
0090         local found=$(cat $filepath | grep $2 | wc -l)
0091         if [ $found = 0 ]; then
0092                 echo 1;
0093                 return
0094         fi
0095 
0096         __switch_governor $1 $2
0097         echo 0;
0098 }
0099 
0100 # $1: policy, $2: governor
0101 switch_show_governor()
0102 {
0103         cur_gov=find_current_governor
0104         if [ $cur_gov == "userspace" ]; then
0105                 cur_freq=find_current_freq
0106         fi
0107 
0108         # switch governor
0109         __switch_governor $1 $2
0110 
0111         printf "\nSwitched governor for $1 to $2\n\n"
0112 
0113         if [ $2 == "userspace" -o $2 == "powersave" -o $2 == "performance" ]; then
0114                 printf "No files to read for $2 governor\n\n"
0115                 return
0116         fi
0117 
0118         # show governor files
0119         local govpath=$(find_gov_directory $1 $2)
0120         read_cpufreq_files_in_dir $govpath
0121 }
0122 
0123 # $1: function to be called, $2: policy
0124 call_for_each_governor()
0125 {
0126         local filepath=$CPUFREQROOT/$2/scaling_available_governors
0127 
0128         # Exit if cpu isn't managed by cpufreq core
0129         if [ ! -f $filepath ]; then
0130                 return;
0131         fi
0132 
0133         backup_governor $2
0134 
0135         local governors=$(cat $filepath)
0136         printf "Available governors for $2: $governors\n"
0137 
0138         for governor in $governors; do
0139                 $1 $2 $governor
0140         done
0141 
0142         restore_governor $2
0143 }
0144 
0145 # $1: loop count
0146 shuffle_governors_for_all_cpus()
0147 {
0148         printf "** Test: Running ${FUNCNAME[0]} for $1 loops **\n\n"
0149 
0150         for i in `seq 1 $1`; do
0151                 for_each_policy call_for_each_governor switch_show_governor
0152         done
0153         printf "%s\n\n" "------------------------------------------------"
0154 }