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