xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/rseq/run_param_test.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0+ or MIT
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunNR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l`
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunEXTRA_ARGS=${@}
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunOLDIFS="$IFS"
9*4882a593SmuzhiyunIFS=$'\n'
10*4882a593SmuzhiyunTEST_LIST=(
11*4882a593Smuzhiyun	"-T s"
12*4882a593Smuzhiyun	"-T l"
13*4882a593Smuzhiyun	"-T b"
14*4882a593Smuzhiyun	"-T b -M"
15*4882a593Smuzhiyun	"-T m"
16*4882a593Smuzhiyun	"-T m -M"
17*4882a593Smuzhiyun	"-T i"
18*4882a593Smuzhiyun	"-T r"
19*4882a593Smuzhiyun)
20*4882a593Smuzhiyun
21*4882a593SmuzhiyunTEST_NAME=(
22*4882a593Smuzhiyun	"spinlock"
23*4882a593Smuzhiyun	"list"
24*4882a593Smuzhiyun	"buffer"
25*4882a593Smuzhiyun	"buffer with barrier"
26*4882a593Smuzhiyun	"memcpy"
27*4882a593Smuzhiyun	"memcpy with barrier"
28*4882a593Smuzhiyun	"increment"
29*4882a593Smuzhiyun	"membarrier"
30*4882a593Smuzhiyun)
31*4882a593SmuzhiyunIFS="$OLDIFS"
32*4882a593Smuzhiyun
33*4882a593SmuzhiyunREPS=1000
34*4882a593SmuzhiyunSLOW_REPS=100
35*4882a593SmuzhiyunNR_THREADS=$((6*${NR_CPUS}))
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunfunction do_tests()
38*4882a593Smuzhiyun{
39*4882a593Smuzhiyun	local i=0
40*4882a593Smuzhiyun	while [ "$i" -lt "${#TEST_LIST[@]}" ]; do
41*4882a593Smuzhiyun		echo "Running test ${TEST_NAME[$i]}"
42*4882a593Smuzhiyun		./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
43*4882a593Smuzhiyun		echo "Running compare-twice test ${TEST_NAME[$i]}"
44*4882a593Smuzhiyun		./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} || exit 1
45*4882a593Smuzhiyun		let "i++"
46*4882a593Smuzhiyun	done
47*4882a593Smuzhiyun}
48*4882a593Smuzhiyun
49*4882a593Smuzhiyunecho "Default parameters"
50*4882a593Smuzhiyundo_tests
51*4882a593Smuzhiyun
52*4882a593Smuzhiyunecho "Loop injection: 10000 loops"
53*4882a593Smuzhiyun
54*4882a593SmuzhiyunOLDIFS="$IFS"
55*4882a593SmuzhiyunIFS=$'\n'
56*4882a593SmuzhiyunINJECT_LIST=(
57*4882a593Smuzhiyun	"1"
58*4882a593Smuzhiyun	"2"
59*4882a593Smuzhiyun	"3"
60*4882a593Smuzhiyun	"4"
61*4882a593Smuzhiyun	"5"
62*4882a593Smuzhiyun	"6"
63*4882a593Smuzhiyun	"7"
64*4882a593Smuzhiyun	"8"
65*4882a593Smuzhiyun	"9"
66*4882a593Smuzhiyun)
67*4882a593SmuzhiyunIFS="$OLDIFS"
68*4882a593Smuzhiyun
69*4882a593SmuzhiyunNR_LOOPS=10000
70*4882a593Smuzhiyun
71*4882a593Smuzhiyuni=0
72*4882a593Smuzhiyunwhile [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
73*4882a593Smuzhiyun	echo "Injecting at <${INJECT_LIST[$i]}>"
74*4882a593Smuzhiyun	do_tests -${INJECT_LIST[i]} ${NR_LOOPS}
75*4882a593Smuzhiyun	let "i++"
76*4882a593Smuzhiyundone
77*4882a593SmuzhiyunNR_LOOPS=
78*4882a593Smuzhiyun
79*4882a593Smuzhiyunfunction inject_blocking()
80*4882a593Smuzhiyun{
81*4882a593Smuzhiyun	OLDIFS="$IFS"
82*4882a593Smuzhiyun	IFS=$'\n'
83*4882a593Smuzhiyun	INJECT_LIST=(
84*4882a593Smuzhiyun		"7"
85*4882a593Smuzhiyun		"8"
86*4882a593Smuzhiyun		"9"
87*4882a593Smuzhiyun	)
88*4882a593Smuzhiyun	IFS="$OLDIFS"
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun	NR_LOOPS=-1
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun	i=0
93*4882a593Smuzhiyun	while [ "$i" -lt "${#INJECT_LIST[@]}" ]; do
94*4882a593Smuzhiyun		echo "Injecting at <${INJECT_LIST[$i]}>"
95*4882a593Smuzhiyun		do_tests -${INJECT_LIST[i]} -1 ${@}
96*4882a593Smuzhiyun		let "i++"
97*4882a593Smuzhiyun	done
98*4882a593Smuzhiyun	NR_LOOPS=
99*4882a593Smuzhiyun}
100*4882a593Smuzhiyun
101*4882a593Smuzhiyunecho "Yield injection (25%)"
102*4882a593Smuzhiyuninject_blocking -m 4 -y
103*4882a593Smuzhiyun
104*4882a593Smuzhiyunecho "Yield injection (50%)"
105*4882a593Smuzhiyuninject_blocking -m 2 -y
106*4882a593Smuzhiyun
107*4882a593Smuzhiyunecho "Yield injection (100%)"
108*4882a593Smuzhiyuninject_blocking -m 1 -y
109*4882a593Smuzhiyun
110*4882a593Smuzhiyunecho "Kill injection (25%)"
111*4882a593Smuzhiyuninject_blocking -m 4 -k
112*4882a593Smuzhiyun
113*4882a593Smuzhiyunecho "Kill injection (50%)"
114*4882a593Smuzhiyuninject_blocking -m 2 -k
115*4882a593Smuzhiyun
116*4882a593Smuzhiyunecho "Kill injection (100%)"
117*4882a593Smuzhiyuninject_blocking -m 1 -k
118*4882a593Smuzhiyun
119*4882a593Smuzhiyunecho "Sleep injection (1ms, 25%)"
120*4882a593Smuzhiyuninject_blocking -m 4 -s 1
121*4882a593Smuzhiyun
122*4882a593Smuzhiyunecho "Sleep injection (1ms, 50%)"
123*4882a593Smuzhiyuninject_blocking -m 2 -s 1
124*4882a593Smuzhiyun
125*4882a593Smuzhiyunecho "Sleep injection (1ms, 100%)"
126*4882a593Smuzhiyuninject_blocking -m 1 -s 1
127