125f47e3eSMark Brown#!/bin/bash
225f47e3eSMark Brown# SPDX-License-Identifier: GPL-2.0-only
325f47e3eSMark Brown# Copyright (C) 2015-2019 ARM Limited.
425f47e3eSMark Brown# Original author: Dave Martin <Dave.Martin@arm.com>
525f47e3eSMark Brown
625f47e3eSMark Brownset -ue
725f47e3eSMark Brown
825f47e3eSMark BrownNR_CPUS=`nproc`
925f47e3eSMark Brown
1025f47e3eSMark Brownpids=
1125f47e3eSMark Brownlogs=
1225f47e3eSMark Brown
1325f47e3eSMark Browncleanup () {
1425f47e3eSMark Brown	trap - INT TERM CHLD
1525f47e3eSMark Brown	set +e
1625f47e3eSMark Brown
1725f47e3eSMark Brown	if [ -n "$pids" ]; then
1825f47e3eSMark Brown		kill $pids
1925f47e3eSMark Brown		wait $pids
2025f47e3eSMark Brown		pids=
2125f47e3eSMark Brown	fi
2225f47e3eSMark Brown
2325f47e3eSMark Brown	if [ -n "$logs" ]; then
2425f47e3eSMark Brown		cat $logs
2525f47e3eSMark Brown		rm $logs
2625f47e3eSMark Brown		logs=
2725f47e3eSMark Brown	fi
2825f47e3eSMark Brown}
2925f47e3eSMark Brown
3025f47e3eSMark Browninterrupt () {
3125f47e3eSMark Brown	cleanup
3225f47e3eSMark Brown	exit 0
3325f47e3eSMark Brown}
3425f47e3eSMark Brown
3525f47e3eSMark Brownchild_died () {
3625f47e3eSMark Brown	cleanup
3725f47e3eSMark Brown	exit 1
3825f47e3eSMark Brown}
3925f47e3eSMark Brown
4025f47e3eSMark Browntrap interrupt INT TERM EXIT
4125f47e3eSMark Brown
4225f47e3eSMark Brownfor x in `seq 0 $((NR_CPUS * 4))`; do
4325f47e3eSMark Brown	log=`mktemp`
4425f47e3eSMark Brown	logs=$logs\ $log
4525f47e3eSMark Brown	./sve-test >$log &
4625f47e3eSMark Brown	pids=$pids\ $!
4725f47e3eSMark Browndone
4825f47e3eSMark Brown
4925f47e3eSMark Brown# Wait for all child processes to be created:
5025f47e3eSMark Brownsleep 10
5125f47e3eSMark Brown
5225f47e3eSMark Brownwhile :; do
5325f47e3eSMark Brown	kill -USR1 $pids
5425f47e3eSMark Browndone &
5525f47e3eSMark Brownpids=$pids\ $!
5625f47e3eSMark Brown
5725f47e3eSMark Brownwait
5825f47e3eSMark Brown
5925f47e3eSMark Brownexit 1
60