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