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