18c2ecf20Sopenharmony_ci#!/bin/bash
28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+ or MIT
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciNR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l`
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciEXTRA_ARGS=${@}
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ciOLDIFS="$IFS"
98c2ecf20Sopenharmony_ciIFS=$'\n'
108c2ecf20Sopenharmony_ciTEST_LIST=(
118c2ecf20Sopenharmony_ci	"-T s"
128c2ecf20Sopenharmony_ci	"-T l"
138c2ecf20Sopenharmony_ci	"-T b"
148c2ecf20Sopenharmony_ci	"-T b -M"
158c2ecf20Sopenharmony_ci	"-T m"
168c2ecf20Sopenharmony_ci	"-T m -M"
178c2ecf20Sopenharmony_ci	"-T i"
188c2ecf20Sopenharmony_ci	"-T r"
198c2ecf20Sopenharmony_ci)
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciTEST_NAME=(
228c2ecf20Sopenharmony_ci	"spinlock"
238c2ecf20Sopenharmony_ci	"list"
248c2ecf20Sopenharmony_ci	"buffer"
258c2ecf20Sopenharmony_ci	"buffer with barrier"
268c2ecf20Sopenharmony_ci	"memcpy"
278c2ecf20Sopenharmony_ci	"memcpy with barrier"
288c2ecf20Sopenharmony_ci	"increment"
298c2ecf20Sopenharmony_ci	"membarrier"
308c2ecf20Sopenharmony_ci)
318c2ecf20Sopenharmony_ciIFS="$OLDIFS"
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ciREPS=1000
348c2ecf20Sopenharmony_ciSLOW_REPS=100
358c2ecf20Sopenharmony_ciNR_THREADS=$((6*${NR_CPUS}))
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cifunction do_tests()
388c2ecf20Sopenharmony_ci{
398c2ecf20Sopenharmony_ci	local i=0
408c2ecf20Sopenharmony_ci	while [ "$i" -lt "${#TEST_LIST[@]}" ]; do
418c2ecf20Sopenharmony_ci		echo "Running test ${TEST_NAME[$i]}"
428c2ecf20Sopenharmony_ci		./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
438c2ecf20Sopenharmony_ci		echo "Running compare-twice test ${TEST_NAME[$i]}"
448c2ecf20Sopenharmony_ci		./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
458c2ecf20Sopenharmony_ci		let "i++"
468c2ecf20Sopenharmony_ci	done
478c2ecf20Sopenharmony_ci}
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciecho "Default parameters"
508c2ecf20Sopenharmony_cido_tests
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ciecho "Loop injection: 10000 loops"
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ciOLDIFS="$IFS"
558c2ecf20Sopenharmony_ciIFS=$'\n'
568c2ecf20Sopenharmony_ciINJECT_LIST=(
578c2ecf20Sopenharmony_ci	"1"
588c2ecf20Sopenharmony_ci	"2"
598c2ecf20Sopenharmony_ci	"3"
608c2ecf20Sopenharmony_ci	"4"
618c2ecf20Sopenharmony_ci	"5"
628c2ecf20Sopenharmony_ci	"6"
638c2ecf20Sopenharmony_ci	"7"
648c2ecf20Sopenharmony_ci	"8"
658c2ecf20Sopenharmony_ci	"9"
668c2ecf20Sopenharmony_ci)
678c2ecf20Sopenharmony_ciIFS="$OLDIFS"
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ciNR_LOOPS=10000
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_cii=0
728c2ecf20Sopenharmony_ciwhile [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
738c2ecf20Sopenharmony_ci	echo "Injecting at <${INJECT_LIST[$i]}>"
748c2ecf20Sopenharmony_ci	do_tests -${INJECT_LIST[i]} ${NR_LOOPS}
758c2ecf20Sopenharmony_ci	let "i++"
768c2ecf20Sopenharmony_cidone
778c2ecf20Sopenharmony_ciNR_LOOPS=
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_cifunction inject_blocking()
808c2ecf20Sopenharmony_ci{
818c2ecf20Sopenharmony_ci	OLDIFS="$IFS"
828c2ecf20Sopenharmony_ci	IFS=$'\n'
838c2ecf20Sopenharmony_ci	INJECT_LIST=(
848c2ecf20Sopenharmony_ci		"7"
858c2ecf20Sopenharmony_ci		"8"
868c2ecf20Sopenharmony_ci		"9"
878c2ecf20Sopenharmony_ci	)
888c2ecf20Sopenharmony_ci	IFS="$OLDIFS"
898c2ecf20Sopenharmony_ci
908c2ecf20Sopenharmony_ci	NR_LOOPS=-1
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci	i=0
938c2ecf20Sopenharmony_ci	while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
948c2ecf20Sopenharmony_ci		echo "Injecting at <${INJECT_LIST[$i]}>"
958c2ecf20Sopenharmony_ci		do_tests -${INJECT_LIST[i]} -1 ${@}
968c2ecf20Sopenharmony_ci		let "i++"
978c2ecf20Sopenharmony_ci	done
988c2ecf20Sopenharmony_ci	NR_LOOPS=
998c2ecf20Sopenharmony_ci}
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ciecho "Yield injection (25%)"
1028c2ecf20Sopenharmony_ciinject_blocking -m 4 -y
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ciecho "Yield injection (50%)"
1058c2ecf20Sopenharmony_ciinject_blocking -m 2 -y
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ciecho "Yield injection (100%)"
1088c2ecf20Sopenharmony_ciinject_blocking -m 1 -y
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ciecho "Kill injection (25%)"
1118c2ecf20Sopenharmony_ciinject_blocking -m 4 -k
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ciecho "Kill injection (50%)"
1148c2ecf20Sopenharmony_ciinject_blocking -m 2 -k
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ciecho "Kill injection (100%)"
1178c2ecf20Sopenharmony_ciinject_blocking -m 1 -k
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ciecho "Sleep injection (1ms, 25%)"
1208c2ecf20Sopenharmony_ciinject_blocking -m 4 -s 1
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ciecho "Sleep injection (1ms, 50%)"
1238c2ecf20Sopenharmony_ciinject_blocking -m 2 -s 1
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ciecho "Sleep injection (1ms, 100%)"
1268c2ecf20Sopenharmony_ciinject_blocking -m 1 -s 1
127