xref: /linux/tools/perf/tests/shell/test_event_open_fallback.sh (revision 9e906a9dead17d81d6c2687f65e159231d0e3286)
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