162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# Special test cases reported by people
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci# Testcase 1: Reported here: http://marc.info/?l=linux-pm&m=140618592709858&w=2
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci# protect against multiple inclusion
962306a36Sopenharmony_ciif [ $FILE_SPECIAL ]; then
1062306a36Sopenharmony_ci	return 0
1162306a36Sopenharmony_cielse
1262306a36Sopenharmony_ci	FILE_SPECIAL=DONE
1362306a36Sopenharmony_cifi
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cisource cpu.sh
1662306a36Sopenharmony_cisource cpufreq.sh
1762306a36Sopenharmony_cisource governor.sh
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci# Test 1
2062306a36Sopenharmony_ci# $1: policy
2162306a36Sopenharmony_ci__simple_lockdep()
2262306a36Sopenharmony_ci{
2362306a36Sopenharmony_ci	# switch to ondemand
2462306a36Sopenharmony_ci	__switch_governor $1 "ondemand"
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	# cat ondemand files
2762306a36Sopenharmony_ci	local ondir=$(find_gov_directory $1 "ondemand")
2862306a36Sopenharmony_ci	if [ -z $ondir ]; then
2962306a36Sopenharmony_ci		printf "${FUNCNAME[0]}Ondemand directory not created, quit"
3062306a36Sopenharmony_ci		return
3162306a36Sopenharmony_ci	fi
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	cat $ondir/*
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	# switch to conservative
3662306a36Sopenharmony_ci	__switch_governor $1 "conservative"
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cisimple_lockdep()
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	printf "** Test: Running ${FUNCNAME[0]} **\n"
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	for_each_policy __simple_lockdep
4462306a36Sopenharmony_ci}
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci# Test 2
4762306a36Sopenharmony_ci# $1: policy
4862306a36Sopenharmony_ci__concurrent_lockdep()
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci	for i in `seq 0 100`; do
5162306a36Sopenharmony_ci		__simple_lockdep $1
5262306a36Sopenharmony_ci	done
5362306a36Sopenharmony_ci}
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciconcurrent_lockdep()
5662306a36Sopenharmony_ci{
5762306a36Sopenharmony_ci	printf "** Test: Running ${FUNCNAME[0]} **\n"
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci	for_each_policy_concurrent __concurrent_lockdep
6062306a36Sopenharmony_ci}
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci# Test 3
6362306a36Sopenharmony_ciquick_shuffle()
6462306a36Sopenharmony_ci{
6562306a36Sopenharmony_ci	# this is called concurrently from governor_race
6662306a36Sopenharmony_ci	for I in `seq 1000`
6762306a36Sopenharmony_ci	do
6862306a36Sopenharmony_ci		echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor &
6962306a36Sopenharmony_ci		echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor &
7062306a36Sopenharmony_ci	done
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cigovernor_race()
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	printf "** Test: Running ${FUNCNAME[0]} **\n"
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci	# run 8 concurrent instances
7862306a36Sopenharmony_ci	for I in `seq 8`
7962306a36Sopenharmony_ci	do
8062306a36Sopenharmony_ci		quick_shuffle &
8162306a36Sopenharmony_ci	done
8262306a36Sopenharmony_ci}
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_ci# Test 4
8562306a36Sopenharmony_ci# $1: cpu
8662306a36Sopenharmony_cihotplug_with_updates_cpu()
8762306a36Sopenharmony_ci{
8862306a36Sopenharmony_ci	local filepath="$CPUROOT/$1/cpufreq"
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci	# switch to ondemand
9162306a36Sopenharmony_ci	__switch_governor_for_cpu $1 "ondemand"
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ci	for i in `seq 1 5000`
9462306a36Sopenharmony_ci	do
9562306a36Sopenharmony_ci		reboot_cpu $1
9662306a36Sopenharmony_ci	done &
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci	local freqs=$(cat $filepath/scaling_available_frequencies)
9962306a36Sopenharmony_ci	local oldfreq=$(cat $filepath/scaling_min_freq)
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci	for j in `seq 1 5000`
10262306a36Sopenharmony_ci	do
10362306a36Sopenharmony_ci		# Set all frequencies one-by-one
10462306a36Sopenharmony_ci		for freq in $freqs; do
10562306a36Sopenharmony_ci			echo $freq > $filepath/scaling_min_freq
10662306a36Sopenharmony_ci		done
10762306a36Sopenharmony_ci	done
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	# restore old freq
11062306a36Sopenharmony_ci	echo $oldfreq > $filepath/scaling_min_freq
11162306a36Sopenharmony_ci}
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_cihotplug_with_updates()
11462306a36Sopenharmony_ci{
11562306a36Sopenharmony_ci	for_each_non_boot_cpu hotplug_with_updates_cpu
11662306a36Sopenharmony_ci}
117