| #!/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 |
| } |