1*25f47e3eSMark Brown#!/bin/bash 2*25f47e3eSMark Brown# SPDX-License-Identifier: GPL-2.0-only 3*25f47e3eSMark Brown# Copyright (C) 2015-2019 ARM Limited. 4*25f47e3eSMark Brown# Original author: Dave Martin <Dave.Martin@arm.com> 5*25f47e3eSMark Brown 6*25f47e3eSMark Brownset -ue 7*25f47e3eSMark Brown 8*25f47e3eSMark BrownNR_CPUS=`nproc` 9*25f47e3eSMark Brown 10*25f47e3eSMark Brownpids= 11*25f47e3eSMark Brownlogs= 12*25f47e3eSMark Brown 13*25f47e3eSMark Browncleanup () { 14*25f47e3eSMark Brown trap - INT TERM CHLD 15*25f47e3eSMark Brown set +e 16*25f47e3eSMark Brown 17*25f47e3eSMark Brown if [ -n "$pids" ]; then 18*25f47e3eSMark Brown kill $pids 19*25f47e3eSMark Brown wait $pids 20*25f47e3eSMark Brown pids= 21*25f47e3eSMark Brown fi 22*25f47e3eSMark Brown 23*25f47e3eSMark Brown if [ -n "$logs" ]; then 24*25f47e3eSMark Brown cat $logs 25*25f47e3eSMark Brown rm $logs 26*25f47e3eSMark Brown logs= 27*25f47e3eSMark Brown fi 28*25f47e3eSMark Brown} 29*25f47e3eSMark Brown 30*25f47e3eSMark Browninterrupt () { 31*25f47e3eSMark Brown cleanup 32*25f47e3eSMark Brown exit 0 33*25f47e3eSMark Brown} 34*25f47e3eSMark Brown 35*25f47e3eSMark Brownchild_died () { 36*25f47e3eSMark Brown cleanup 37*25f47e3eSMark Brown exit 1 38*25f47e3eSMark Brown} 39*25f47e3eSMark Brown 40*25f47e3eSMark Browntrap interrupt INT TERM EXIT 41*25f47e3eSMark Brown 42*25f47e3eSMark Brownfor x in `seq 0 $((NR_CPUS * 4))`; do 43*25f47e3eSMark Brown log=`mktemp` 44*25f47e3eSMark Brown logs=$logs\ $log 45*25f47e3eSMark Brown ./sve-test >$log & 46*25f47e3eSMark Brown pids=$pids\ $! 47*25f47e3eSMark Browndone 48*25f47e3eSMark Brown 49*25f47e3eSMark Brown# Wait for all child processes to be created: 50*25f47e3eSMark Brownsleep 10 51*25f47e3eSMark Brown 52*25f47e3eSMark Brownwhile :; do 53*25f47e3eSMark Brown kill -USR1 $pids 54*25f47e3eSMark Browndone & 55*25f47e3eSMark Brownpids=$pids\ $! 56*25f47e3eSMark Brown 57*25f47e3eSMark Brownwait 58*25f47e3eSMark Brown 59*25f47e3eSMark Brownexit 1 60