From a8a2d5c0b33ed32e6056f197e065cd1800b21948 Mon Sep 17 00:00:00 2001 From: James Clark Date: Tue, 31 Aug 2021 15:54:59 +0100 Subject: perf tools: Refactor LLVM test warning for missing binary The same warning is duplicated in two places so refactor it into a single function "search_program_and_warn". This will be used a third time in a later commit. Signed-off-by: James Clark Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Mark Rutland Cc: Namhyung Kim Cc: clang-built-linux@googlegroups.com Link: http://lore.kernel.org/lkml/20210831145501.2135754-1-james.clark@arm.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/llvm-utils.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'tools/perf/util/llvm-utils.c') diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c index cbd9b268f168..cec9c16efb17 100644 --- a/tools/perf/util/llvm-utils.c +++ b/tools/perf/util/llvm-utils.c @@ -38,6 +38,8 @@ struct llvm_param llvm_param = { .user_set_param = false, }; +static void version_notice(void); + int perf_llvm_config(const char *var, const char *value) { if (!strstarts(var, "llvm.")) @@ -108,6 +110,21 @@ search_program(const char *def, const char *name, return ret; } +static int search_program_and_warn(const char *def, const char *name, + char *output) +{ + int ret = search_program(def, name, output); + + if (ret) { + pr_err("ERROR:\tunable to find %s.\n" + "Hint:\tTry to install latest clang/llvm to support BPF. Check your $PATH\n" + " \tand '%s-path' option in [llvm] section of ~/.perfconfig.\n", + name, name); + version_notice(); + } + return ret; +} + #define READ_SIZE 4096 static int read_from_pipe(const char *cmd, void **p_buf, size_t *p_read_sz) @@ -458,16 +475,10 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf, if (!template) template = CLANG_BPF_CMD_DEFAULT_TEMPLATE; - err = search_program(llvm_param.clang_path, + err = search_program_and_warn(llvm_param.clang_path, "clang", clang_path); - if (err) { - pr_err( -"ERROR:\tunable to find clang.\n" -"Hint:\tTry to install latest clang/llvm to support BPF. Check your $PATH\n" -" \tand 'clang-path' option in [llvm] section of ~/.perfconfig.\n"); - version_notice(); + if (err) return -ENOENT; - } /* * This is an optional work. Even it fail we can continue our @@ -495,14 +506,9 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf, force_set_env("WORKING_DIR", kbuild_dir ? : "."); if (opts) { - err = search_program(llvm_param.llc_path, "llc", llc_path); - if (err) { - pr_err("ERROR:\tunable to find llc.\n" - "Hint:\tTry to install latest clang/llvm to support BPF. Check your $PATH\n" - " \tand 'llc-path' option in [llvm] section of ~/.perfconfig.\n"); - version_notice(); + err = search_program_and_warn(llvm_param.llc_path, "llc", llc_path); + if (err) goto errout; - } err = -ENOMEM; if (asprintf(&pipe_template, "%s -emit-llvm | %s -march=bpf %s -filetype=obj -o -", -- cgit From 792adb1aa97251c48da7035bf927920b611925c8 Mon Sep 17 00:00:00 2001 From: James Clark Date: Tue, 31 Aug 2021 15:55:00 +0100 Subject: perf tools: Fix LLVM test failure when running in verbose mode A CI system might want to run all tests in verbose mode so that there is enough information to diagnose issues. This LLVM test is the only test that uses "-v" to signify to not skip the test if the preconditions aren't met (LLVM isn't installed). This means that running the test in verbose mode without LLVM installed causes a test failure. For consistency with the other tests, remove this verbose/skip check. An alternate solution would be to make _all_ tests not skip when run in verbose mode, but I don't think that would be intuitive. Also change the search_program() call to search_program_and_warn(). Previously the hint about installing LLVM was only printed by the actual test because this check was skipped in verbose mode. To maintain the old behaviour, the precondition check must also print the full warning. Previous output: $ ./perf test llvm 40: LLVM search and compile : 40.1: Basic BPF llvm compile : Skip $ ./perf test -v llvm 40: LLVM search and compile : 40.1: Basic BPF llvm compile : --- start --- test child forked, pid 2085835 ERROR: unable to find clang. Hint: Try to install latest clang/llvm to support BPF. Check your $PATH ... test child finished with -1 ---- end ---- LLVM search and compile subtest 1: FAILED! New output (non verbose mode is identical, verbose changes from fail to skip): $ ./perf test llvm 40: LLVM search and compile : 40.1: Basic BPF llvm compile : Skip $ ./perf test -v llvm 40: LLVM search and compile : 40.1: Basic BPF llvm compile : --- start --- test child forked, pid 2087680 ERROR: unable to find clang. Hint: Try to install latest clang/llvm to support BPF. Check your $PATH ... No clang, skip this test test child finished with -2 ---- end ---- LLVM search and compile subtest 1: Skip Signed-off-by: James Clark Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Mark Rutland Cc: Namhyung Kim Cc: clang-built-linux@googlegroups.com Link: http://lore.kernel.org/lkml/20210831145501.2135754-2-james.clark@arm.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/llvm-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/perf/util/llvm-utils.c') diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c index cec9c16efb17..d95c56d175bc 100644 --- a/tools/perf/util/llvm-utils.c +++ b/tools/perf/util/llvm-utils.c @@ -585,5 +585,5 @@ int llvm__search_clang(void) { char clang_path[PATH_MAX]; - return search_program(llvm_param.clang_path, "clang", clang_path); + return search_program_and_warn(llvm_param.clang_path, "clang", clang_path); } -- cgit From 40a72c6472c52ce765d5c57ab053083c8cbcc3c9 Mon Sep 17 00:00:00 2001 From: James Clark Date: Tue, 31 Aug 2021 15:55:01 +0100 Subject: perf tools: Fix LLVM download hint link http://llvm.org/apt returns 404, it has moved to https://apt.llvm.org/ Signed-off-by: James Clark Tested-by: Arnaldo Carvalho de Melo Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Mark Rutland Cc: Namhyung Kim Cc: clang-built-linux@googlegroups.com Link: http://lore.kernel.org/lkml/20210831145501.2135754-3-james.clark@arm.com Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/llvm-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tools/perf/util/llvm-utils.c') diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c index d95c56d175bc..96c8ef60f4f8 100644 --- a/tools/perf/util/llvm-utils.c +++ b/tools/perf/util/llvm-utils.c @@ -234,7 +234,7 @@ version_notice(void) " \t\tgit clone http://llvm.org/git/clang.git\n\n" " \tOr fetch the latest clang/llvm 3.7 from pre-built llvm packages for\n" " \tdebian/ubuntu:\n" -" \t\thttp://llvm.org/apt\n\n" +" \t\thttps://apt.llvm.org/\n\n" " \tIf you are using old version of clang, change 'clang-bpf-cmd-template'\n" " \toption in [llvm] section of ~/.perfconfig to:\n\n" " \t \"$CLANG_EXEC $CLANG_OPTIONS $KERNEL_INC_OPTIONS $PERF_BPF_INC_OPTIONS \\\n" -- cgit