2022-10-28 13:23:42

by James Clark

[permalink] [raw]
Subject: [PATCH] perf test: Fix skipping branch stack sampling test

Commit f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test
to include sanity check for branch filter") added a skip if certain
branch options aren't available. But the change added both -b
(--branch-any) and --branch-filter options at the same time, which will
always result in a failure on any platform because the arguments can't
be used together.

Fix this by removing -b (--branch-any) and leaving --branch-filter which
already specifies 'any'. Also add warning messages to the test and perf
tool.

Output on x86 before this fix:

$ sudo ./perf test branch
108: Check branch stack sampling : Skip

After:

$ sudo ./perf test branch
108: Check branch stack sampling : Ok

Fixes: f4a2aade6809 ("perf tests powerpc: Fix branch stack sampling test to include sanity check for branch filter")
Signed-off-by: James Clark <[email protected]>
---
tools/perf/tests/shell/test_brstack.sh | 5 ++++-
tools/perf/util/parse-branch-options.c | 4 +++-
2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/perf/tests/shell/test_brstack.sh b/tools/perf/tests/shell/test_brstack.sh
index ec801cffae6b..d7ff5c4b4da4 100755
--- a/tools/perf/tests/shell/test_brstack.sh
+++ b/tools/perf/tests/shell/test_brstack.sh
@@ -13,7 +13,10 @@ fi

# skip the test if the hardware doesn't support branch stack sampling
# and if the architecture doesn't support filter types: any,save_type,u
-perf record -b -o- -B --branch-filter any,save_type,u true > /dev/null 2>&1 || exit 2
+if ! perf record -o- --no-buildid --branch-filter any,save_type,u -- true > /dev/null 2>&1 ; then
+ echo "skip: system doesn't support filter types: any,save_type,u"
+ exit 2
+fi

TMPDIR=$(mktemp -d /tmp/__perf_test.program.XXXXX)

diff --git a/tools/perf/util/parse-branch-options.c b/tools/perf/util/parse-branch-options.c
index 00588b9db474..31faf2bb49ff 100644
--- a/tools/perf/util/parse-branch-options.c
+++ b/tools/perf/util/parse-branch-options.c
@@ -102,8 +102,10 @@ parse_branch_stack(const struct option *opt, const char *str, int unset)
/*
* cannot set it twice, -b + --branch-filter for instance
*/
- if (*mode)
+ if (*mode) {
+ pr_err("Error: Can't use --branch-any (-b) with --branch-filter (-j).\n");
return -1;
+ }

return parse_branch_str(str, mode);
}
--
2.25.1