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