xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/arm64/fp/fpsimd-stress (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
3*4882a593Smuzhiyun# Copyright (C) 2015-2019 ARM Limited.
4*4882a593Smuzhiyun# Original author: Dave Martin <Dave.Martin@arm.com>
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunset -ue
7*4882a593Smuzhiyun
8*4882a593SmuzhiyunNR_CPUS=`nproc`
9*4882a593Smuzhiyun
10*4882a593Smuzhiyunpids=
11*4882a593Smuzhiyunlogs=
12*4882a593Smuzhiyun
13*4882a593Smuzhiyuncleanup () {
14*4882a593Smuzhiyun	trap - INT TERM CHLD
15*4882a593Smuzhiyun	set +e
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun	if [ -n "$pids" ]; then
18*4882a593Smuzhiyun		kill $pids
19*4882a593Smuzhiyun		wait $pids
20*4882a593Smuzhiyun		pids=
21*4882a593Smuzhiyun	fi
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun	if [ -n "$logs" ]; then
24*4882a593Smuzhiyun		cat $logs
25*4882a593Smuzhiyun		rm $logs
26*4882a593Smuzhiyun		logs=
27*4882a593Smuzhiyun	fi
28*4882a593Smuzhiyun}
29*4882a593Smuzhiyun
30*4882a593Smuzhiyuninterrupt () {
31*4882a593Smuzhiyun	cleanup
32*4882a593Smuzhiyun	exit 0
33*4882a593Smuzhiyun}
34*4882a593Smuzhiyun
35*4882a593Smuzhiyunchild_died () {
36*4882a593Smuzhiyun	cleanup
37*4882a593Smuzhiyun	exit 1
38*4882a593Smuzhiyun}
39*4882a593Smuzhiyun
40*4882a593Smuzhiyuntrap interrupt INT TERM EXIT
41*4882a593Smuzhiyuntrap child_died CHLD
42*4882a593Smuzhiyun
43*4882a593Smuzhiyunfor x in `seq 0 $((NR_CPUS * 4))`; do
44*4882a593Smuzhiyun	log=`mktemp`
45*4882a593Smuzhiyun	logs=$logs\ $log
46*4882a593Smuzhiyun	./fpsimd-test >$log &
47*4882a593Smuzhiyun	pids=$pids\ $!
48*4882a593Smuzhiyundone
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun# Wait for all child processes to be created:
51*4882a593Smuzhiyunsleep 10
52*4882a593Smuzhiyun
53*4882a593Smuzhiyunwhile :; do
54*4882a593Smuzhiyun	kill -USR1 $pids
55*4882a593Smuzhiyundone &
56*4882a593Smuzhiyunpids=$pids\ $!
57*4882a593Smuzhiyun
58*4882a593Smuzhiyunwait
59*4882a593Smuzhiyun
60*4882a593Smuzhiyunexit 1
61