1fc9c17b2SZide Chen#!/bin/bash 2fc9c17b2SZide Chen# Perf event open fallback test 3fc9c17b2SZide Chen# SPDX-License-Identifier: GPL-2.0 4fc9c17b2SZide Chen 5fc9c17b2SZide Chenskip_cnt=0 6fc9c17b2SZide Chenok_cnt=0 7fc9c17b2SZide Chenerr_cnt=0 8fc9c17b2SZide Chen 9fc9c17b2SZide Chenperf_record() 10fc9c17b2SZide Chen{ 11*44f6b440SIan Rogers perf record -o /dev/null "$@" -- true 1>/dev/null 2>&1 12fc9c17b2SZide Chen} 13fc9c17b2SZide Chen 14fc9c17b2SZide Chentest_decrease_precise_ip() 15fc9c17b2SZide Chen{ 16fc9c17b2SZide Chen echo "Decrease precise ip test" 17fc9c17b2SZide Chen 18fc9c17b2SZide Chen perf list pmu | grep -q 'cycles' || return 2 19fc9c17b2SZide Chen 20fc9c17b2SZide Chen if ! perf_record -e cycles; then 21fc9c17b2SZide Chen return 2 22fc9c17b2SZide Chen fi 23fc9c17b2SZide Chen 24fc9c17b2SZide Chen # It should reduce precision level down to 0 if needed. 25fc9c17b2SZide Chen if ! perf_record -e cycles:P; then 26fc9c17b2SZide Chen return 1 27fc9c17b2SZide Chen fi 28fc9c17b2SZide Chen return 0 29fc9c17b2SZide Chen} 30fc9c17b2SZide Chen 31fc9c17b2SZide Chentest_decrease_precise_ip_complicated() 32fc9c17b2SZide Chen{ 33fc9c17b2SZide Chen echo "Decrease precise ip test (complicated case)" 34fc9c17b2SZide Chen 35fc9c17b2SZide Chen perf list pmu | grep -q 'mem-loads-aux' || return 2 36fc9c17b2SZide Chen 37*44f6b440SIan Rogers if ! perf_record -e '{mem-loads-aux:S,mem-loads:PS}'; then 38fc9c17b2SZide Chen return 1 39fc9c17b2SZide Chen fi 40fc9c17b2SZide Chen return 0 41fc9c17b2SZide Chen} 42fc9c17b2SZide Chen 43fc9c17b2SZide Chencount_result() 44fc9c17b2SZide Chen{ 45fc9c17b2SZide Chen if [ "$1" -eq 2 ] ; then 46fc9c17b2SZide Chen skip_cnt=$((skip_cnt + 1)) 47fc9c17b2SZide Chen return 48fc9c17b2SZide Chen fi 49fc9c17b2SZide Chen if [ "$1" -eq 0 ] ; then 50fc9c17b2SZide Chen ok_cnt=$((ok_cnt + 1)) 51fc9c17b2SZide Chen return 52fc9c17b2SZide Chen fi 53fc9c17b2SZide Chen err_cnt=$((err_cnt + 1)) 54fc9c17b2SZide Chen} 55fc9c17b2SZide Chen 56fc9c17b2SZide Chenret=0 57fc9c17b2SZide Chentest_decrease_precise_ip || ret=$? ; count_result $ret ; ret=0 58fc9c17b2SZide Chentest_decrease_precise_ip_complicated || ret=$? ; count_result $ret ; ret=0 59fc9c17b2SZide Chen 60fc9c17b2SZide Chencleanup 61fc9c17b2SZide Chen 62fc9c17b2SZide Chenif [ ${err_cnt} -gt 0 ] ; then 63fc9c17b2SZide Chen exit 1 64fc9c17b2SZide Chenfi 65fc9c17b2SZide Chen 66fc9c17b2SZide Chenif [ ${ok_cnt} -gt 0 ] ; then 67fc9c17b2SZide Chen exit 0 68fc9c17b2SZide Chenfi 69fc9c17b2SZide Chen 70fc9c17b2SZide Chen# Skip 71fc9c17b2SZide Chenexit 2 72