1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker# 4*053f45beSAndroid Build Coastguard Worker# Special test cases reported by people 5*053f45beSAndroid Build Coastguard Worker 6*053f45beSAndroid Build Coastguard Worker# Testcase 1: Reported here: http://marc.info/?l=linux-pm&m=140618592709858&w=2 7*053f45beSAndroid Build Coastguard Worker 8*053f45beSAndroid Build Coastguard Worker# protect against multiple inclusion 9*053f45beSAndroid Build Coastguard Workerif [ $FILE_SPECIAL ]; then 10*053f45beSAndroid Build Coastguard Worker return 0 11*053f45beSAndroid Build Coastguard Workerelse 12*053f45beSAndroid Build Coastguard Worker FILE_SPECIAL=DONE 13*053f45beSAndroid Build Coastguard Workerfi 14*053f45beSAndroid Build Coastguard Worker 15*053f45beSAndroid Build Coastguard Workersource cpu.sh 16*053f45beSAndroid Build Coastguard Workersource cpufreq.sh 17*053f45beSAndroid Build Coastguard Workersource governor.sh 18*053f45beSAndroid Build Coastguard Worker 19*053f45beSAndroid Build Coastguard Worker# Test 1 20*053f45beSAndroid Build Coastguard Worker# $1: policy 21*053f45beSAndroid Build Coastguard Worker__simple_lockdep() 22*053f45beSAndroid Build Coastguard Worker{ 23*053f45beSAndroid Build Coastguard Worker # switch to ondemand 24*053f45beSAndroid Build Coastguard Worker __switch_governor $1 "ondemand" 25*053f45beSAndroid Build Coastguard Worker 26*053f45beSAndroid Build Coastguard Worker # cat ondemand files 27*053f45beSAndroid Build Coastguard Worker local ondir=$(find_gov_directory $1 "ondemand") 28*053f45beSAndroid Build Coastguard Worker if [ -z $ondir ]; then 29*053f45beSAndroid Build Coastguard Worker printf "${FUNCNAME[0]}Ondemand directory not created, quit" 30*053f45beSAndroid Build Coastguard Worker return 31*053f45beSAndroid Build Coastguard Worker fi 32*053f45beSAndroid Build Coastguard Worker 33*053f45beSAndroid Build Coastguard Worker cat $ondir/* 34*053f45beSAndroid Build Coastguard Worker 35*053f45beSAndroid Build Coastguard Worker # switch to conservative 36*053f45beSAndroid Build Coastguard Worker __switch_governor $1 "conservative" 37*053f45beSAndroid Build Coastguard Worker} 38*053f45beSAndroid Build Coastguard Worker 39*053f45beSAndroid Build Coastguard Workersimple_lockdep() 40*053f45beSAndroid Build Coastguard Worker{ 41*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n" 42*053f45beSAndroid Build Coastguard Worker 43*053f45beSAndroid Build Coastguard Worker for_each_policy __simple_lockdep 44*053f45beSAndroid Build Coastguard Worker} 45*053f45beSAndroid Build Coastguard Worker 46*053f45beSAndroid Build Coastguard Worker# Test 2 47*053f45beSAndroid Build Coastguard Worker# $1: policy 48*053f45beSAndroid Build Coastguard Worker__concurrent_lockdep() 49*053f45beSAndroid Build Coastguard Worker{ 50*053f45beSAndroid Build Coastguard Worker for i in `seq 0 100`; do 51*053f45beSAndroid Build Coastguard Worker __simple_lockdep $1 52*053f45beSAndroid Build Coastguard Worker done 53*053f45beSAndroid Build Coastguard Worker} 54*053f45beSAndroid Build Coastguard Worker 55*053f45beSAndroid Build Coastguard Workerconcurrent_lockdep() 56*053f45beSAndroid Build Coastguard Worker{ 57*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n" 58*053f45beSAndroid Build Coastguard Worker 59*053f45beSAndroid Build Coastguard Worker for_each_policy_concurrent __concurrent_lockdep 60*053f45beSAndroid Build Coastguard Worker} 61*053f45beSAndroid Build Coastguard Worker 62*053f45beSAndroid Build Coastguard Worker# Test 3 63*053f45beSAndroid Build Coastguard Workerquick_shuffle() 64*053f45beSAndroid Build Coastguard Worker{ 65*053f45beSAndroid Build Coastguard Worker # this is called concurrently from governor_race 66*053f45beSAndroid Build Coastguard Worker for I in `seq 1000` 67*053f45beSAndroid Build Coastguard Worker do 68*053f45beSAndroid Build Coastguard Worker echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor & 69*053f45beSAndroid Build Coastguard Worker echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor & 70*053f45beSAndroid Build Coastguard Worker done 71*053f45beSAndroid Build Coastguard Worker} 72*053f45beSAndroid Build Coastguard Worker 73*053f45beSAndroid Build Coastguard Workergovernor_race() 74*053f45beSAndroid Build Coastguard Worker{ 75*053f45beSAndroid Build Coastguard Worker printf "** Test: Running ${FUNCNAME[0]} **\n" 76*053f45beSAndroid Build Coastguard Worker 77*053f45beSAndroid Build Coastguard Worker # run 8 concurrent instances 78*053f45beSAndroid Build Coastguard Worker for I in `seq 8` 79*053f45beSAndroid Build Coastguard Worker do 80*053f45beSAndroid Build Coastguard Worker quick_shuffle & 81*053f45beSAndroid Build Coastguard Worker done 82*053f45beSAndroid Build Coastguard Worker} 83*053f45beSAndroid Build Coastguard Worker 84*053f45beSAndroid Build Coastguard Worker# Test 4 85*053f45beSAndroid Build Coastguard Worker# $1: cpu 86*053f45beSAndroid Build Coastguard Workerhotplug_with_updates_cpu() 87*053f45beSAndroid Build Coastguard Worker{ 88*053f45beSAndroid Build Coastguard Worker local filepath="$CPUROOT/$1/cpufreq" 89*053f45beSAndroid Build Coastguard Worker 90*053f45beSAndroid Build Coastguard Worker # switch to ondemand 91*053f45beSAndroid Build Coastguard Worker __switch_governor_for_cpu $1 "ondemand" 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Worker for i in `seq 1 5000` 94*053f45beSAndroid Build Coastguard Worker do 95*053f45beSAndroid Build Coastguard Worker reboot_cpu $1 96*053f45beSAndroid Build Coastguard Worker done & 97*053f45beSAndroid Build Coastguard Worker 98*053f45beSAndroid Build Coastguard Worker local freqs=$(cat $filepath/scaling_available_frequencies) 99*053f45beSAndroid Build Coastguard Worker local oldfreq=$(cat $filepath/scaling_min_freq) 100*053f45beSAndroid Build Coastguard Worker 101*053f45beSAndroid Build Coastguard Worker for j in `seq 1 5000` 102*053f45beSAndroid Build Coastguard Worker do 103*053f45beSAndroid Build Coastguard Worker # Set all frequencies one-by-one 104*053f45beSAndroid Build Coastguard Worker for freq in $freqs; do 105*053f45beSAndroid Build Coastguard Worker echo $freq > $filepath/scaling_min_freq 106*053f45beSAndroid Build Coastguard Worker done 107*053f45beSAndroid Build Coastguard Worker done 108*053f45beSAndroid Build Coastguard Worker 109*053f45beSAndroid Build Coastguard Worker # restore old freq 110*053f45beSAndroid Build Coastguard Worker echo $oldfreq > $filepath/scaling_min_freq 111*053f45beSAndroid Build Coastguard Worker} 112*053f45beSAndroid Build Coastguard Worker 113*053f45beSAndroid Build Coastguard Workerhotplug_with_updates() 114*053f45beSAndroid Build Coastguard Worker{ 115*053f45beSAndroid Build Coastguard Worker for_each_non_boot_cpu hotplug_with_updates_cpu 116*053f45beSAndroid Build Coastguard Worker} 117