1f08c3bdfSopenharmony_ci#!/bin/bash
2f08c3bdfSopenharmony_ci
3f08c3bdfSopenharmony_ciTMPDIR=/tmp
4f08c3bdfSopenharmony_ci
5f08c3bdfSopenharmony_ciPASS=0
6f08c3bdfSopenharmony_ciFAIL=1
7f08c3bdfSopenharmony_ciNOSUPPORT=2
8f08c3bdfSopenharmony_ciMISSING_FILE=3
9f08c3bdfSopenharmony_ciUNTESTED=4
10f08c3bdfSopenharmony_ciYES=0
11f08c3bdfSopenharmony_ci
12f08c3bdfSopenharmony_cicleanup() {
13f08c3bdfSopenharmony_ci	if [ -f ${1} ] ; then
14f08c3bdfSopenharmony_ci		rm -f ${1}
15f08c3bdfSopenharmony_ci	fi
16f08c3bdfSopenharmony_ci}
17f08c3bdfSopenharmony_ci
18f08c3bdfSopenharmony_cicheck_arch() {
19f08c3bdfSopenharmony_ci	case "$(uname -m)" in
20f08c3bdfSopenharmony_ci	i[4-6]86|x86_64)
21f08c3bdfSopenharmony_ci		;;
22f08c3bdfSopenharmony_ci	*)
23f08c3bdfSopenharmony_ci		tst_brkm TCONF "Arch not supported; not running testcases"
24f08c3bdfSopenharmony_ci		;;
25f08c3bdfSopenharmony_ci	esac
26f08c3bdfSopenharmony_ci}
27f08c3bdfSopenharmony_ci
28f08c3bdfSopenharmony_cicheck_config_options() {
29f08c3bdfSopenharmony_ci	if ( ! ${3} "${1}" ${2} | grep -v "#" > /dev/null ) ; then
30f08c3bdfSopenharmony_ci		tst_brkm TCONF "NOSUPPORT: current system dosen't support ${1}"
31f08c3bdfSopenharmony_ci	fi
32f08c3bdfSopenharmony_ci}
33f08c3bdfSopenharmony_ci
34f08c3bdfSopenharmony_ciget_topology() {
35f08c3bdfSopenharmony_ci	declare -a cpus
36f08c3bdfSopenharmony_ci	declare -a phyid
37f08c3bdfSopenharmony_ci
38f08c3bdfSopenharmony_ci	total_cpus=`tst_ncpus`
39f08c3bdfSopenharmony_ci	(( total_cpus-=1 ))
40f08c3bdfSopenharmony_ci	for cpu in $(seq 0 "${total_cpus}" )
41f08c3bdfSopenharmony_ci	do
42f08c3bdfSopenharmony_ci		cpus[$cpu]=cpu${cpu}
43f08c3bdfSopenharmony_ci		phyid[$cpu]=$(cat \
44f08c3bdfSopenharmony_ci		/sys/devices/system/cpu/cpu${cpu}/topology/physical_package_id)
45f08c3bdfSopenharmony_ci	done
46f08c3bdfSopenharmony_ci	j=0
47f08c3bdfSopenharmony_ci	while [ "${j}" -lt "${total_cpus}" ]
48f08c3bdfSopenharmony_ci	do
49f08c3bdfSopenharmony_ci		(( k = $j + 1 ))
50f08c3bdfSopenharmony_ci		if [ ${phyid[$j]} -eq ${phyid[$k]} ] ; then
51f08c3bdfSopenharmony_ci			echo "${cpus[$j]} -P ${cpus[$k]}" | sed -e "s/cpu//g"
52f08c3bdfSopenharmony_ci		fi
53f08c3bdfSopenharmony_ci		(( j+=1 ))
54f08c3bdfSopenharmony_ci	done
55f08c3bdfSopenharmony_ci}
56f08c3bdfSopenharmony_ci
57f08c3bdfSopenharmony_cicheck_cpufreq() {
58f08c3bdfSopenharmony_ci	total_cpus=`tst_ncpus`
59f08c3bdfSopenharmony_ci	(( total_cpus-=1 ))
60f08c3bdfSopenharmony_ci
61f08c3bdfSopenharmony_ci	for cpu in $(seq 0 "${total_cpus}" )
62f08c3bdfSopenharmony_ci	do
63f08c3bdfSopenharmony_ci		if [ ! -d /sys/devices/system/cpu/cpu${cpu}/cpufreq ] ; then
64f08c3bdfSopenharmony_ci			tst_brkm TCONF "NOSUPPORT: cpufreq support not " \
65f08c3bdfSopenharmony_ci				"found please check Kernel configuration " \
66f08c3bdfSopenharmony_ci				"or BIOS settings"
67f08c3bdfSopenharmony_ci		fi
68f08c3bdfSopenharmony_ci	done
69f08c3bdfSopenharmony_ci}
70f08c3bdfSopenharmony_ci
71f08c3bdfSopenharmony_ciget_supporting_freq() {
72f08c3bdfSopenharmony_ci	cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies \
73f08c3bdfSopenharmony_ci		| uniq
74f08c3bdfSopenharmony_ci}
75f08c3bdfSopenharmony_ci
76f08c3bdfSopenharmony_ciget_supporting_govr() {
77f08c3bdfSopenharmony_ci	cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors \
78f08c3bdfSopenharmony_ci		| uniq
79f08c3bdfSopenharmony_ci}
80f08c3bdfSopenharmony_ci
81f08c3bdfSopenharmony_ciis_hyper_threaded() {
82f08c3bdfSopenharmony_ci	siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'`
83f08c3bdfSopenharmony_ci	cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'`
84f08c3bdfSopenharmony_ci	[ $siblings -gt $cpu_cores ]; echo $?
85f08c3bdfSopenharmony_ci}
86f08c3bdfSopenharmony_ci
87f08c3bdfSopenharmony_cicheck_input() {
88f08c3bdfSopenharmony_ci	validity_check=${2:-valid}
89f08c3bdfSopenharmony_ci	testfile=$3
90f08c3bdfSopenharmony_ci	if [ "${validity_check}" = "invalid" ] ; then
91f08c3bdfSopenharmony_ci		PASS="Testcase FAIL - Able to execute"
92f08c3bdfSopenharmony_ci		FAIL="Testcase PASS - Unable to execute"
93f08c3bdfSopenharmony_ci	else
94f08c3bdfSopenharmony_ci		PASS="Testcase PASS"
95f08c3bdfSopenharmony_ci		FAIL="Testcase FAIL"
96f08c3bdfSopenharmony_ci	fi
97f08c3bdfSopenharmony_ci	RC=0
98f08c3bdfSopenharmony_ci	for input in ${1}
99f08c3bdfSopenharmony_ci	do
100f08c3bdfSopenharmony_ci		echo ${input} > ${test_file} 2>/dev/null
101f08c3bdfSopenharmony_ci		return_value=$?
102f08c3bdfSopenharmony_ci		output=$(cat ${test_file})
103f08c3bdfSopenharmony_ci		if [ "${return_value}" = "0" -a "${input}" = "${output}" ] ; then
104f08c3bdfSopenharmony_ci			echo "${0}: ${PASS}: echo ${input} > ${test_file}"
105f08c3bdfSopenharmony_ci			if [ "${validity_check}" = "invalid" ] ; then
106f08c3bdfSopenharmony_ci				RC=1
107f08c3bdfSopenharmony_ci			fi
108f08c3bdfSopenharmony_ci		else
109f08c3bdfSopenharmony_ci			echo "${0}: ${FAIL}: echo ${input} > ${test_file}"
110f08c3bdfSopenharmony_ci			if [ "${validity_check}" = "valid" ] ; then
111f08c3bdfSopenharmony_ci				RC=1
112f08c3bdfSopenharmony_ci			fi
113f08c3bdfSopenharmony_ci		fi
114f08c3bdfSopenharmony_ci	done
115f08c3bdfSopenharmony_ci	return $RC
116f08c3bdfSopenharmony_ci}
117f08c3bdfSopenharmony_ci
118f08c3bdfSopenharmony_ciis_multi_socket() {
119f08c3bdfSopenharmony_ci	no_of_sockets=`cat \
120f08c3bdfSopenharmony_ci		/sys/devices/system/cpu/cpu*/topology/physical_package_id \
121f08c3bdfSopenharmony_ci		| sort -u | wc -l`
122f08c3bdfSopenharmony_ci	[ $no_of_sockets -gt 1 ] ; echo $?
123f08c3bdfSopenharmony_ci}
124f08c3bdfSopenharmony_ci
125f08c3bdfSopenharmony_ciis_multi_core() {
126f08c3bdfSopenharmony_ci	siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'`
127f08c3bdfSopenharmony_ci	cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | cut -f2 -d':'`
128f08c3bdfSopenharmony_ci	if [ $siblings -eq $cpu_cores ]; then
129f08c3bdfSopenharmony_ci		[ $cpu_cores -gt 1 ]; echo $?
130f08c3bdfSopenharmony_ci	else
131f08c3bdfSopenharmony_ci		: $(( num_of_cpus = siblings / cpu_cores ))
132f08c3bdfSopenharmony_ci		[ $num_of_cpus -gt 1 ]; echo $?
133f08c3bdfSopenharmony_ci	fi
134f08c3bdfSopenharmony_ci}
135f08c3bdfSopenharmony_ci
136f08c3bdfSopenharmony_ciis_dual_core() {
137f08c3bdfSopenharmony_ci	siblings=`grep siblings /proc/cpuinfo | uniq | cut -f2 -d':'`
138f08c3bdfSopenharmony_ci	cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq \
139f08c3bdfSopenharmony_ci			| cut -f2 -d':'`
140f08c3bdfSopenharmony_ci        if [ $siblings -eq $cpu_cores ]; then
141f08c3bdfSopenharmony_ci                [ $cpu_cores -eq 2 ]; echo $?
142f08c3bdfSopenharmony_ci        else
143f08c3bdfSopenharmony_ci                : $(( num_of_cpus = siblings / cpu_cores ))
144f08c3bdfSopenharmony_ci                [ $num_of_cpus -eq 2 ]; echo $?
145f08c3bdfSopenharmony_ci        fi
146f08c3bdfSopenharmony_ci}
147f08c3bdfSopenharmony_ci
148f08c3bdfSopenharmony_ciget_kernel_version() {
149f08c3bdfSopenharmony_ci	# Get kernel minor version
150f08c3bdfSopenharmony_ci	export kernel_version=`uname -r | awk -F. '{print $1"."$2"."$3}' \
151f08c3bdfSopenharmony_ci		| cut -f1 -d'-'`
152f08c3bdfSopenharmony_ci}
153f08c3bdfSopenharmony_ci
154f08c3bdfSopenharmony_ciget_valid_input() {
155f08c3bdfSopenharmony_ci	kernel_version=$1
156f08c3bdfSopenharmony_ci	case "$kernel_version" in
157f08c3bdfSopenharmony_ci	'2.6.26' | '2.6.27' | '2.6.28')
158f08c3bdfSopenharmony_ci			export valid_input="0 1" ;;
159f08c3bdfSopenharmony_ci		*) export valid_input="0 1 2" ;;
160f08c3bdfSopenharmony_ci	esac
161f08c3bdfSopenharmony_ci}
162f08c3bdfSopenharmony_ci
163f08c3bdfSopenharmony_cianalyze_result_hyperthreaded() {
164f08c3bdfSopenharmony_ci	sched_mc=$1
165f08c3bdfSopenharmony_ci    pass_count=$2
166f08c3bdfSopenharmony_ci    sched_smt=$3
167f08c3bdfSopenharmony_ci	PASS="Test PASS"
168f08c3bdfSopenharmony_ci	FAIL="Test FAIL"
169f08c3bdfSopenharmony_ci
170f08c3bdfSopenharmony_ci	RC=0
171f08c3bdfSopenharmony_ci	case "$sched_mc" in
172f08c3bdfSopenharmony_ci	0)
173f08c3bdfSopenharmony_ci		case "$sched_smt" in
174f08c3bdfSopenharmony_ci		0)
175f08c3bdfSopenharmony_ci			if [ $pass_count -lt 5 ]; then
176f08c3bdfSopenharmony_ci				echo "${PASS}: cpu consolidation failed for" \
177f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
178f08c3bdfSopenharmony_ci			else
179f08c3bdfSopenharmony_ci				RC=1
180f08c3bdfSopenharmony_ci				echo "${FAIL}: cpu consolidation passed for" \
181f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
182f08c3bdfSopenharmony_ci			fi
183f08c3bdfSopenharmony_ci			;;
184f08c3bdfSopenharmony_ci		*)
185f08c3bdfSopenharmony_ci			if [ $pass_count -lt 5 ]; then
186f08c3bdfSopenharmony_ci				RC=1
187f08c3bdfSopenharmony_ci				echo "${FAIL}: cpu consolidation for" \
188f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
189f08c3bdfSopenharmony_ci			else
190f08c3bdfSopenharmony_ci				echo "${PASS}: cpu consolidation for" \
191f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
192f08c3bdfSopenharmony_ci			fi
193f08c3bdfSopenharmony_ci			;;
194f08c3bdfSopenharmony_ci		esac ;;
195f08c3bdfSopenharmony_ci	*)
196f08c3bdfSopenharmony_ci		if [ $pass_count -lt 5 ]; then
197f08c3bdfSopenharmony_ci			RC=1
198f08c3bdfSopenharmony_ci			echo "${FAIL}: cpu consolidation for" \
199f08c3bdfSopenharmony_ci				"sched_mc=$sched_mc & sched_smt=$sched_smt"
200f08c3bdfSopenharmony_ci		else
201f08c3bdfSopenharmony_ci			echo "${PASS}: cpu consolidation for" \
202f08c3bdfSopenharmony_ci				"sched_mc=$sched_mc & sched_smt=$sched_smt"
203f08c3bdfSopenharmony_ci		fi
204f08c3bdfSopenharmony_ci		;;
205f08c3bdfSopenharmony_ci	esac
206f08c3bdfSopenharmony_ci	return $RC
207f08c3bdfSopenharmony_ci}
208f08c3bdfSopenharmony_ci
209f08c3bdfSopenharmony_cianalyze_package_consolidation_result() {
210f08c3bdfSopenharmony_ci	sched_mc=$1
211f08c3bdfSopenharmony_ci    pass_count=$2
212f08c3bdfSopenharmony_ci
213f08c3bdfSopenharmony_ci	if [ $# -gt 2 ]
214f08c3bdfSopenharmony_ci	then
215f08c3bdfSopenharmony_ci		sched_smt=$3
216f08c3bdfSopenharmony_ci	else
217f08c3bdfSopenharmony_ci		sched_smt=-1
218f08c3bdfSopenharmony_ci	fi
219f08c3bdfSopenharmony_ci
220f08c3bdfSopenharmony_ci	PASS="Test PASS"
221f08c3bdfSopenharmony_ci	FAIL="Test FAIL"
222f08c3bdfSopenharmony_ci
223f08c3bdfSopenharmony_ci	RC=0
224f08c3bdfSopenharmony_ci	if [ $hyper_threaded -eq $YES -a $sched_smt -gt -1 ]; then
225f08c3bdfSopenharmony_ci		analyze_result_hyperthreaded $sched_mc $pass_count $sched_smt
226f08c3bdfSopenharmony_ci	else
227f08c3bdfSopenharmony_ci		case "$sched_mc" in
228f08c3bdfSopenharmony_ci	    0)
229f08c3bdfSopenharmony_ci    	    if [ $pass_count -lt 5 ]; then
230f08c3bdfSopenharmony_ci				echo "${PASS}: cpu consolidation failed for" \
231f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc"
232f08c3bdfSopenharmony_ci        	else
233f08c3bdfSopenharmony_ci				RC=1
234f08c3bdfSopenharmony_ci				echo "${FAIL}: cpu consolidation passed for" \
235f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc"
236f08c3bdfSopenharmony_ci			fi
237f08c3bdfSopenharmony_ci			;;
238f08c3bdfSopenharmony_ci    	*)
239f08c3bdfSopenharmony_ci			if [ $pass_count -lt 5 ]; then
240f08c3bdfSopenharmony_ci				RC=1
241f08c3bdfSopenharmony_ci				echo "${FAIL}: consolidation at package level" \
242f08c3bdfSopenharmony_ci					"failed for sched_mc=$sched_mc"
243f08c3bdfSopenharmony_ci			else
244f08c3bdfSopenharmony_ci				echo "${PASS}: consolidation at package level" \
245f08c3bdfSopenharmony_ci					"passed for sched_mc=$sched_mc"
246f08c3bdfSopenharmony_ci			fi
247f08c3bdfSopenharmony_ci        	;;
248f08c3bdfSopenharmony_ci    	esac
249f08c3bdfSopenharmony_ci	fi
250f08c3bdfSopenharmony_ci	return $RC
251f08c3bdfSopenharmony_ci}
252f08c3bdfSopenharmony_ci
253f08c3bdfSopenharmony_cianalyze_core_consolidation_result() {
254f08c3bdfSopenharmony_ci	sched_smt=$1
255f08c3bdfSopenharmony_ci	pass_count=$2
256f08c3bdfSopenharmony_ci	PASS="Test PASS"
257f08c3bdfSopenharmony_ci	FAIL="Test FAIL"
258f08c3bdfSopenharmony_ci
259f08c3bdfSopenharmony_ci	RC=0
260f08c3bdfSopenharmony_ci	case "$sched_smt" in
261f08c3bdfSopenharmony_ci	0)
262f08c3bdfSopenharmony_ci		if [ $pass_count -lt 5 ]; then
263f08c3bdfSopenharmony_ci			echo "${PASS}: consolidation at core level failed" \
264f08c3bdfSopenharmony_ci				"when sched_smt=$sched_smt"
265f08c3bdfSopenharmony_ci		else
266f08c3bdfSopenharmony_ci			RC=1
267f08c3bdfSopenharmony_ci			echo "${FAIL}: consolidation at core level passed for" \
268f08c3bdfSopenharmony_ci				"sched_smt=$sched_smt"
269f08c3bdfSopenharmony_ci		fi ;;
270f08c3bdfSopenharmony_ci	*)
271f08c3bdfSopenharmony_ci		if [ $pass_count -lt 5 ]; then
272f08c3bdfSopenharmony_ci			RC=1
273f08c3bdfSopenharmony_ci			echo "${FAIL}: consolidation at core level failed for" \
274f08c3bdfSopenharmony_ci				"sched_smt=$sched_smt"
275f08c3bdfSopenharmony_ci		else
276f08c3bdfSopenharmony_ci			echo "${PASS}: consolidation at core level passed for" \
277f08c3bdfSopenharmony_ci				"sched_smt=$sched_smt"
278f08c3bdfSopenharmony_ci		fi ;;
279f08c3bdfSopenharmony_ci	esac
280f08c3bdfSopenharmony_ci	return $RC
281f08c3bdfSopenharmony_ci}
282f08c3bdfSopenharmony_ci
283f08c3bdfSopenharmony_cianalyze_sched_domain_result(){
284f08c3bdfSopenharmony_ci	sched_mc=$1
285f08c3bdfSopenharmony_ci	result=$2
286f08c3bdfSopenharmony_ci	sched_smt=$3
287f08c3bdfSopenharmony_ci	PASS="Test PASS"
288f08c3bdfSopenharmony_ci	FAIL="Test FAIL"
289f08c3bdfSopenharmony_ci
290f08c3bdfSopenharmony_ci	RC=0
291f08c3bdfSopenharmony_ci	if [ $hyper_threaded -eq $YES ]; then
292f08c3bdfSopenharmony_ci		if [ $sched_smt ]; then
293f08c3bdfSopenharmony_ci			if [ "$result" = 0 ];then
294f08c3bdfSopenharmony_ci				echo "${PASS}: sched domain test for" \
295f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
296f08c3bdfSopenharmony_ci			else
297f08c3bdfSopenharmony_ci				RC=1
298f08c3bdfSopenharmony_ci				echo "${FAIL}: sched domain test for" \
299f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc & sched_smt=$sched_smt"
300f08c3bdfSopenharmony_ci			fi
301f08c3bdfSopenharmony_ci		else
302f08c3bdfSopenharmony_ci			if [ "$result" = 0 ];then
303f08c3bdfSopenharmony_ci				echo "${PASS}: sched domain test for" \
304f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc"
305f08c3bdfSopenharmony_ci			else
306f08c3bdfSopenharmony_ci				RC=1
307f08c3bdfSopenharmony_ci				echo "${FAIL}: sched domain test for" \
308f08c3bdfSopenharmony_ci					"sched_mc=$sched_mc"
309f08c3bdfSopenharmony_ci			fi
310f08c3bdfSopenharmony_ci		fi
311f08c3bdfSopenharmony_ci	else
312f08c3bdfSopenharmony_ci		if [ "$result" = 0 ];then
313f08c3bdfSopenharmony_ci			echo "${PASS}: sched domain test for sched_mc=$sched_mc"
314f08c3bdfSopenharmony_ci		else
315f08c3bdfSopenharmony_ci			RC=1
316f08c3bdfSopenharmony_ci			echo "${FAIL}: sched domain test for sched_mc=$sched_mc"
317f08c3bdfSopenharmony_ci		fi
318f08c3bdfSopenharmony_ci	fi
319f08c3bdfSopenharmony_ci	return $RC
320f08c3bdfSopenharmony_ci}
321