-----Original Message----- From: Athira Rajeev <atraj...@linux.vnet.ibm.com> To: a...@kernel.org, jo...@kernel.org Cc: m...@ellerman.id.au, linux-perf-us...@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, ma...@linux.vnet.ibm.com, rnsas...@linux.ibm.com, kj...@linux.ibm.com, disg...@linux.vnet.ibm.com , irog...@google.com Subject: [PATCH V2] tools/perf/tests: Skip perf BPF test if clang is not present Date: Wed, 11 May 2022 17:24:38 +0530
Perf BPF filter test fails in environment where "clang"is not installed. Test failure logs: <<>> 42: BPF filter : 42.1: Basic BPF filtering : Skip 42.2: BPF pinning : FAILED! 42.3: BPF prologue generation : FAILED!<<>> Enabling verbose option provided debug logs which saysclang/llvm needs to be installed. Snippet of verbose logs: <<>> 42.2: BPF pinning : --- start ---test child forked, pid 61423ERROR: unable to find clang.Hint: Try to install latest clang/llvm to support BPF. Check your $PATH <<logs_here>> Failed to compile test case: 'Basic BPF llvm compile'Unable to get BPF object, fix kbuild firsttest child finished with -1 ---- end ----BPF filter subtest 2: FAILED!<<>> Here subtests, "BPF pinning" and "BPF prologue generation"failed and logs shows clang/llvm is needed. After installingclang, testcase passes. Reason on why subtest failure happens though logs has properdebug information:Main function __test__bpf calls test_llvm__fetch_bpf_obj bypassing 4th argument as true ( 4th arguments maps to parameter"force" in test_llvm__fetch_bpf_obj ). But this will causetest_llvm__fetch_bpf_obj to skip the check for clang/llvm. Snippet of code part which checks for clang based onparameter "force" in test_llvm__fetch_bpf_obj: <<>>if (!force && (!llvm_param.user_set_param &&<<>> Since force is set to "false", test won't get skipped andfails to compile test case. The BPF code compilation needsclang, So pass the fourth argument as "false" and also skipthe test if reason for return is "TEST_SKIP" After the patch: <<>> 42: BPF filter : 42.1: Basic BPF filtering : Skip 42.2: BPF pinning : Skip 42.3: BPF prologue generation : Skip<<>> Fixes: ba1fae431e74 ("perf test: Add 'perf test BPF'")Signed-off-by: Athira Rajeev <atraj...@linux.vnet.ibm.com>---Changelog: Addressed review comments from Arnaldo by adding reason for skipping of testcase. tools/perf/tests/bpf.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) Tested the patch on powerpc and powernv, perf BPF test works fine with the patch.Tested-by: Disha Goel <disg...@linux.vnet.ibm.com> diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.cindex 57b9591f7cbb..17c023823713 100644--- a/tools/perf/tests/bpf.c+++ b/tools/perf/tests/bpf.c@@ -222,11 +222,11 @@ static int __test__bpf(int idx) ret = test_llvm__fetch_bpf_obj(&obj_buf, &obj_buf_sz, bpf_testcase_table[idx].prog_id,- true, NULL);+ false, NULL); if (ret != TEST_OK || !obj_buf || !obj_buf_sz) { pr_debug("Unable to get BPF object, %s\n", bpf_testcase_table[idx].msg_compile_fail);- if (idx == 0)+ if ((idx == 0) || (ret == TEST_SKIP)) return TEST_SKIP; else return TEST_FAIL;@@ -364,9 +364,11 @@ static int test__bpf_prologue_test(struct test_suite *test __maybe_unused, static struct test_case bpf_tests[] = { #ifdef HAVE_LIBBPF_SUPPORT TEST_CASE("Basic BPF filtering", basic_bpf_test),- TEST_CASE("BPF pinning", bpf_pinning),+ TEST_CA SE_REASON("BPF pinning", bpf_pinning,+ "clang isn't installed or environment missing BPF support"), #ifdef HAVE_BPF_PROLOGUE- TEST_CASE("BPF prologue generation", bpf_prologue_test),+ TEST_CASE_REASON("BPF prologue generation", bpf_prologue_test,+ "clang isn't installed or environment missing BPF support"), #else TEST_CASE_REASON("BPF prologue generation", bpf_prologue_test, "not compiled in"), #endif