| #!/bin/bash | |
| # Perf event open fallback test | |
| # SPDX-License-Identifier: GPL-2.0 | |
| skip_cnt=0 | |
| ok_cnt=0 | |
| err_cnt=0 | |
| perf_record() | |
| { | |
| perf record -o /dev/null "$@" -- true 1>/dev/null 2>&1 | |
| } | |
| test_decrease_precise_ip() | |
| { | |
| echo "Decrease precise ip test" | |
| perf list pmu | grep -q 'cycles' || return 2 | |
| if ! perf_record -e cycles; then | |
| return 2 | |
| fi | |
| # It should reduce precision level down to 0 if needed. | |
| if ! perf_record -e cycles:P; then | |
| return 1 | |
| fi | |
| return 0 | |
| } | |
| test_decrease_precise_ip_complicated() | |
| { | |
| echo "Decrease precise ip test (complicated case)" | |
| perf list pmu | grep -q 'mem-loads-aux' || return 2 | |
| if ! perf_record -e '{mem-loads-aux:S,mem-loads:PS}'; then | |
| return 1 | |
| fi | |
| return 0 | |
| } | |
| count_result() | |
| { | |
| if [ "$1" -eq 2 ] ; then | |
| skip_cnt=$((skip_cnt + 1)) | |
| return | |
| fi | |
| if [ "$1" -eq 0 ] ; then | |
| ok_cnt=$((ok_cnt + 1)) | |
| return | |
| fi | |
| err_cnt=$((err_cnt + 1)) | |
| } | |
| ret=0 | |
| test_decrease_precise_ip || ret=$? ; count_result $ret ; ret=0 | |
| test_decrease_precise_ip_complicated || ret=$? ; count_result $ret ; ret=0 | |
| cleanup | |
| if [ ${err_cnt} -gt 0 ] ; then | |
| exit 1 | |
| fi | |
| if [ ${ok_cnt} -gt 0 ] ; then | |
| exit 0 | |
| fi | |
| # Skip | |
| exit 2 |