51 lines · bash
1#!/bin/sh2# Check Arm SPE doesn't hang when there are forks3 4# SPDX-License-Identifier: GPL-2.05# German Gomez <german.gomez@arm.com>, 20226 7skip_if_no_arm_spe_event() {8 perf list | grep -E -q 'arm_spe_[0-9]+//' && return 09 return 210}11 12skip_if_no_arm_spe_event || exit 213 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 INT26 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 133log0=$(wc -l $PERF_RECORD_LOG)34echo Log lines = $log035sleep 136log1=$(wc -l $PERF_RECORD_LOG)37echo Log lines after 1 second = $log138 39kill $PERFPID40wait $PERFPID41 42if [ "$log0" = "$log1" ];43then44 echo "SPE hang test: FAIL"45 exit 146else47 echo "SPE hang test: PASS"48fi49 50exit 051