| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # | |
| # Special test cases reported by people | |
| # Testcase 1: Reported here: http://marc.info/?l=linux-pm&m=140618592709858&w=2 | |
| # protect against multiple inclusion | |
| if [ $FILE_SPECIAL ]; then | |
| return 0 | |
| else | |
| FILE_SPECIAL=DONE | |
| fi | |
| source cpu.sh | |
| source cpufreq.sh | |
| source governor.sh | |
| # Test 1 | |
| # $1: policy | |
| __simple_lockdep() | |
| { | |
| # switch to ondemand | |
| __switch_governor $1 "ondemand" | |
| # cat ondemand files | |
| local ondir=$(find_gov_directory $1 "ondemand") | |
| if [ -z $ondir ]; then | |
| printf "${FUNCNAME[0]}Ondemand directory not created, quit" | |
| return | |
| fi | |
| cat $ondir/* | |
| # switch to conservative | |
| __switch_governor $1 "conservative" | |
| } | |
| simple_lockdep() | |
| { | |
| printf "** Test: Running ${FUNCNAME[0]} **\n" | |
| for_each_policy __simple_lockdep | |
| } | |
| # Test 2 | |
| # $1: policy | |
| __concurrent_lockdep() | |
| { | |
| for i in `seq 0 100`; do | |
| __simple_lockdep $1 | |
| done | |
| } | |
| concurrent_lockdep() | |
| { | |
| printf "** Test: Running ${FUNCNAME[0]} **\n" | |
| for_each_policy_concurrent __concurrent_lockdep | |
| } | |
| # Test 3 | |
| quick_shuffle() | |
| { | |
| # this is called concurrently from governor_race | |
| for I in `seq 1000` | |
| do | |
| echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor & | |
| echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor & | |
| done | |
| } | |
| governor_race() | |
| { | |
| printf "** Test: Running ${FUNCNAME[0]} **\n" | |
| # run 8 concurrent instances | |
| for I in `seq 8` | |
| do | |
| quick_shuffle & | |
| done | |
| } | |
| # Test 4 | |
| # $1: cpu | |
| hotplug_with_updates_cpu() | |
| { | |
| local filepath="$CPUROOT/$1/cpufreq" | |
| # switch to ondemand | |
| __switch_governor_for_cpu $1 "ondemand" | |
| for i in `seq 1 5000` | |
| do | |
| reboot_cpu $1 | |
| done & | |
| local freqs=$(cat $filepath/scaling_available_frequencies) | |
| local oldfreq=$(cat $filepath/scaling_min_freq) | |
| for j in `seq 1 5000` | |
| do | |
| # Set all frequencies one-by-one | |
| for freq in $freqs; do | |
| echo $freq > $filepath/scaling_min_freq | |
| done | |
| done | |
| # restore old freq | |
| echo $oldfreq > $filepath/scaling_min_freq | |
| } | |
| hotplug_with_updates() | |
| { | |
| for_each_non_boot_cpu hotplug_with_updates_cpu | |
| } |