1#!/bin/sh 2# Miscellaneous Intel PT testing 3# SPDX-License-Identifier: GPL-2.0 4 5set -e 6 7# Skip if no Intel PT 8perf list | grep -q 'intel_pt//' || exit 2 9 10skip_cnt=0 11ok_cnt=0 12err_cnt=0 13 14temp_dir=$(mktemp -d /tmp/perf-test-intel-pt-sh.XXXXXXXXXX) 15 16tmpfile="${temp_dir}/tmp-perf.data" 17perfdatafile="${temp_dir}/test-perf.data" 18 19cleanup() 20{ 21 trap - EXIT TERM INT 22 sane=$(echo "${temp_dir}" | cut -b 1-26) 23 if [ "${sane}" = "/tmp/perf-test-intel-pt-sh" ] ; then 24 echo "--- Cleaning up ---" 25 rm -f "${temp_dir}/"* 26 rmdir "${temp_dir}" 27 fi 28} 29 30trap_cleanup() 31{ 32 cleanup 33 exit 1 34} 35 36trap trap_cleanup EXIT TERM INT 37 38can_cpu_wide() 39{ 40 perf record -o ${tmpfile} -B -N --no-bpf-event -e dummy:u -C $1 true >/dev/null 2>&1 || return 2 41 return 0 42} 43 44test_system_wide_side_band() 45{ 46 # Need CPU 0 and CPU 1 47 can_cpu_wide 0 || return $? 48 can_cpu_wide 1 || return $? 49 50 # Record on CPU 0 a task running on CPU 1 51 perf record -B -N --no-bpf-event -o ${perfdatafile} -e intel_pt//u -C 0 -- taskset --cpu-list 1 uname 52 53 # Should get MMAP events from CPU 1 because they can be needed to decode 54 mmap_cnt=`perf script -i ${perfdatafile} --no-itrace --show-mmap-events -C 1 2>/dev/null | grep MMAP | wc -l` 55 56 if [ ${mmap_cnt} -gt 0 ] ; then 57 return 0 58 fi 59 60 echo "Failed to record MMAP events on CPU 1 when tracing CPU 0" 61 return 1 62} 63 64count_result() 65{ 66 if [ $1 -eq 2 ] ; then 67 skip_cnt=$((skip_cnt + 1)) 68 return 69 fi 70 if [ $1 -eq 0 ] ; then 71 ok_cnt=$((ok_cnt + 1)) 72 return 73 fi 74 err_cnt=$((err_cnt + 1)) 75} 76 77test_system_wide_side_band 78 79count_result $? 80 81cleanup 82 83if [ ${err_cnt} -gt 0 ] ; then 84 exit 1 85fi 86 87if [ ${ok_cnt} -gt 0 ] ; then 88 exit 0 89fi 90 91exit 2 92