1#!/bin/sh 2# Check Arm SPE doesn't hang when there are forks 3 4# SPDX-License-Identifier: GPL-2.0 5# German Gomez <german.gomez@arm.com>, 2022 6 7skip_if_no_arm_spe_event() { 8 perf list | grep -E -q 'arm_spe_[0-9]+//' && return 0 9 return 2 10} 11 12skip_if_no_arm_spe_event || exit 2 13 14TEST_PROGRAM="perf test -w sqrtloop 10" 15PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX) 16PERF_RECORD_LOG=$(mktemp /tmp/__perf_test.log.XXXXX) 17 18cleanup_files() 19{ 20 echo "Cleaning up files..." 21 rm -f ${PERF_RECORD_LOG} 22 rm -f ${PERF_DATA} 23} 24 25trap cleanup_files EXIT TERM INT 26 27echo "Recording workload..." 28perf record -o ${PERF_DATA} -e arm_spe/period=65536/ -vvv -- $TEST_PROGRAM > ${PERF_RECORD_LOG} 2>&1 & 29PERFPID=$! 30 31# Check if perf hangs by checking the perf-record logs. 32sleep 1 33log0=$(wc -l $PERF_RECORD_LOG) 34echo Log lines = $log0 35sleep 1 36log1=$(wc -l $PERF_RECORD_LOG) 37echo Log lines after 1 second = $log1 38 39kill $PERFPID 40wait $PERFPID 41 42if [ "$log0" = "$log1" ]; 43then 44 echo "SPE hang test: FAIL" 45 exit 1 46else 47 echo "SPE hang test: PASS" 48fi 49 50exit 0 51