0001
0002
0003
0004
0005
0006
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
0020
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
0033 find_current_governor()
0034 {
0035 cat $CPUFREQROOT/$1/scaling_governor
0036 }
0037
0038
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
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
0069
0070 __switch_governor()
0071 {
0072 echo $2 > $CPUFREQROOT/$1/scaling_governor
0073 }
0074
0075
0076
0077 __switch_governor_for_cpu()
0078 {
0079 echo $2 > $CPUROOT/$1/cpufreq/scaling_governor
0080 }
0081
0082
0083
0084
0085 switch_governor()
0086 {
0087 local filepath=$CPUFREQROOT/$1/scaling_available_governors
0088
0089
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
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
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
0119 local govpath=$(find_gov_directory $1 $2)
0120 read_cpufreq_files_in_dir $govpath
0121 }
0122
0123
0124 call_for_each_governor()
0125 {
0126 local filepath=$CPUFREQROOT/$2/scaling_available_governors
0127
0128
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
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 }