* [PATCH v14 1/7] tools/lib/subcmd: Don't free the usage string
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 2/7] perf check: Introduce 'check' subcommand Aditya Gupta
` (5 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
Currently, commands which depend on 'parse_options_subcommand()' don't
show the usage string, and instead show '(null)'
$ ./perf sched
Usage: (null)
-D, --dump-raw-trace dump raw trace in ASCII
-f, --force don't complain, do it
-i, --input <file> input file name
-v, --verbose be more verbose (show symbol address, etc)
'parse_options_subcommand()' is generally expected to initialise the usage
string, with information in the passed 'subcommands[]' array
This behaviour was changed in:
commit 230a7a71f9221 ("libsubcmd: Fix parse-options memory leak")
Where the generated usage string is deallocated, and usage[0] string is
reassigned as NULL.
As discussed in [1], free the allocated usage string in the main function
itself, and don't reset usage string to NULL in parse_options_subcommand
With this change, the behaviour is restored.
$ ./perf sched
Usage: perf sched [<options>] {record|latency|map|replay|script|timehist}
-D, --dump-raw-trace dump raw trace in ASCII
-f, --force don't complain, do it
-i, --input <file> input file name
-v, --verbose be more verbose (show symbol address, etc)
[1]: https://lore.kernel.org/linux-perf-users/htq5vhx6piet4nuq2mmhk7fs2bhfykv52dbppwxmo3s7du2odf@styd27tioc6e/
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Fixes: 230a7a71f922 ("libsubcmd: Fix parse-options memory leak")
Acked-by: Namhyung Kim <namhyung@kernel.org>
Suggested-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
Note:
This patch is independent of the series.
But I kept it along with the series, since the rest of the patches should
be applied only after this patch is applied (else the 'free' in
builtin-check.c will crash)
---
---
tools/lib/subcmd/parse-options.c | 8 +++-----
tools/perf/builtin-kmem.c | 2 ++
tools/perf/builtin-kvm.c | 3 +++
tools/perf/builtin-kwork.c | 3 +++
tools/perf/builtin-lock.c | 3 +++
tools/perf/builtin-mem.c | 3 +++
tools/perf/builtin-sched.c | 3 +++
7 files changed, 20 insertions(+), 5 deletions(-)
diff --git a/tools/lib/subcmd/parse-options.c b/tools/lib/subcmd/parse-options.c
index 4b60ec03b0bb..eb896d30545b 100644
--- a/tools/lib/subcmd/parse-options.c
+++ b/tools/lib/subcmd/parse-options.c
@@ -633,10 +633,11 @@ int parse_options_subcommand(int argc, const char **argv, const struct option *o
const char *const subcommands[], const char *usagestr[], int flags)
{
struct parse_opt_ctx_t ctx;
- char *buf = NULL;
/* build usage string if it's not provided */
if (subcommands && !usagestr[0]) {
+ char *buf = NULL;
+
astrcatf(&buf, "%s %s [<options>] {", subcmd_config.exec_name, argv[0]);
for (int i = 0; subcommands[i]; i++) {
@@ -678,10 +679,7 @@ int parse_options_subcommand(int argc, const char **argv, const struct option *o
astrcatf(&error_buf, "unknown switch `%c'", *ctx.opt);
usage_with_options(usagestr, options);
}
- if (buf) {
- usagestr[0] = NULL;
- free(buf);
- }
+
return parse_options_end(&ctx);
}
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index b3cbac40b8c7..a756147e2eec 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -2057,6 +2057,8 @@ int cmd_kmem(int argc, const char **argv)
out_delete:
perf_session__delete(session);
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)kmem_usage[0]);
return ret;
}
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 692267b1b7e8..55ea17c5ff02 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -2184,5 +2184,8 @@ int cmd_kvm(int argc, const char **argv)
else
usage_with_options(kvm_usage, kvm_options);
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)kvm_usage[0]);
+
return 0;
}
diff --git a/tools/perf/builtin-kwork.c b/tools/perf/builtin-kwork.c
index 6a4281b8fd10..c1daf82c9b92 100644
--- a/tools/perf/builtin-kwork.c
+++ b/tools/perf/builtin-kwork.c
@@ -2519,5 +2519,8 @@ int cmd_kwork(int argc, const char **argv)
} else
usage_with_options(kwork_usage, kwork_options);
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)kwork_usage[0]);
+
return 0;
}
diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
index 2c216427e929..062e2b56a2ab 100644
--- a/tools/perf/builtin-lock.c
+++ b/tools/perf/builtin-lock.c
@@ -2712,6 +2712,9 @@ int cmd_lock(int argc, const char **argv)
usage_with_options(lock_usage, lock_options);
}
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)lock_usage[0]);
+
zfree(&lockhash_table);
return rc;
}
diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
index 18e5f9a0ddc2..bb38bb5a1c26 100644
--- a/tools/perf/builtin-mem.c
+++ b/tools/perf/builtin-mem.c
@@ -546,5 +546,8 @@ int cmd_mem(int argc, const char **argv)
else
usage_with_options(mem_usage, mem_options);
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)mem_usage[0]);
+
return 0;
}
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 1c386ebe4b98..5531b3581c36 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -3807,5 +3807,8 @@ int cmd_sched(int argc, const char **argv)
usage_with_options(sched_usage, sched_options);
}
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)sched_usage[0]);
+
return 0;
}
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v14 2/7] perf check: Introduce 'check' subcommand
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 1/7] tools/lib/subcmd: Don't free the usage string Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array Aditya Gupta
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
Currently the presence of a feature is checked with a combination of
perf version --build-options and greps, such as:
perf version --build-options | grep " on .* HAVE_FEATURE"
Instead of this, introduce a subcommand "perf check feature", with which
scripts can test for presence of a feature, such as:
perf check feature HAVE_FEATURE
'perf check feature' command is expected to have exit status of 0 if
feature is built-in, and 1 if it's not built-in or if feature is not known.
Multiple features can also be passed as a comma-separated list, in which
case the exit status will be 1 only if all of the passed features are
built-in. For example, with below command, it will have exit status of 0
only if both libtraceevent and bpf are enabled, else 1 in all other cases
perf check feature libtraceevent,bpf
The arguments are case-insensitive.
An array 'supported_features' has also been introduced that can be used by
other commands like 'perf version --build-options', so that new features
can be added in one place, with the array
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
tools/perf/Build | 1 +
tools/perf/Documentation/perf-check.txt | 82 +++++++++++
tools/perf/builtin-check.c | 180 ++++++++++++++++++++++++
tools/perf/builtin.h | 17 +++
tools/perf/perf.c | 1 +
5 files changed, 281 insertions(+)
create mode 100644 tools/perf/Documentation/perf-check.txt
create mode 100644 tools/perf/builtin-check.c
diff --git a/tools/perf/Build b/tools/perf/Build
index 1d4957957d75..3e486f7df94b 100644
--- a/tools/perf/Build
+++ b/tools/perf/Build
@@ -1,5 +1,6 @@
perf-bench-y += builtin-bench.o
perf-y += builtin-annotate.o
+perf-y += builtin-check.o
perf-y += builtin-config.o
perf-y += builtin-diff.o
perf-y += builtin-evlist.o
diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt
new file mode 100644
index 000000000000..b081514d240a
--- /dev/null
+++ b/tools/perf/Documentation/perf-check.txt
@@ -0,0 +1,82 @@
+perf-check(1)
+===============
+
+NAME
+----
+perf-check - check if features are present in perf
+
+SYNOPSIS
+--------
+[verse]
+'perf check' [<options>]
+'perf check' {feature <feature_list>} [<options>]
+
+DESCRIPTION
+-----------
+With no subcommands given, 'perf check' command just prints the command
+usage on the standard output.
+
+If the subcommand 'feature' is used, then status of feature is printed
+on the standard output (unless '-q' is also passed), ie. whether it is
+compiled-in/built-in or not.
+Also, 'perf check feature' returns with exit status 0 if the feature
+is built-in, otherwise returns with exit status 1.
+
+SUBCOMMANDS
+-----------
+
+feature::
+
+ Print whether feature(s) is compiled-in or not, and also returns with an
+ exit status of 0, if passed feature(s) are compiled-in, else 1.
+
+ It expects a feature list as an argument. There can be a single feature
+ name/macro, or multiple features can also be passed as a comma-separated
+ list, in which case the exit status will be 0 only if all of the passed
+ features are compiled-in.
+
+ The feature names/macros are case-insensitive.
+
+ Example Usage:
+ perf check feature libtraceevent
+ perf check feature HAVE_LIBTRACEEVENT
+ perf check feature libtraceevent,bpf
+
+ Supported feature names/macro:
+ aio / HAVE_AIO_SUPPORT
+ bpf / HAVE_LIBBPF_SUPPORT
+ bpf_skeletons / HAVE_BPF_SKEL
+ debuginfod / HAVE_DEBUGINFOD_SUPPORT
+ dwarf / HAVE_DWARF_SUPPORT
+ dwarf_getlocations / HAVE_DWARF_GETLOCATIONS_SUPPORT
+ dwarf-unwind-support / HAVE_DWARF_UNWIND_SUPPORT
+ get_cpuid / HAVE_AUXTRACE_SUPPORT
+ libaudit / HAVE_LIBAUDIT_SUPPORT
+ libbfd / HAVE_LIBBFD_SUPPORT
+ libcapstone / HAVE_LIBCAPSTONE_SUPPORT
+ libcrypto / HAVE_LIBCRYPTO_SUPPORT
+ libdw-dwarf-unwind / HAVE_DWARF_SUPPORT
+ libelf / HAVE_LIBELF_SUPPORT
+ libnuma / HAVE_LIBNUMA_SUPPORT
+ libopencsd / HAVE_CSTRACE_SUPPORT
+ libperl / HAVE_LIBPERL_SUPPORT
+ libpfm4 / HAVE_LIBPFM
+ libpython / HAVE_LIBPYTHON_SUPPORT
+ libslang / HAVE_SLANG_SUPPORT
+ libtraceevent / HAVE_LIBTRACEEVENT
+ libunwind / HAVE_LIBUNWIND_SUPPORT
+ lzma / HAVE_LZMA_SUPPORT
+ numa_num_possible_cpus / HAVE_LIBNUMA_SUPPORT
+ syscall_table / HAVE_SYSCALL_TABLE_SUPPORT
+ zlib / HAVE_ZLIB_SUPPORT
+ zstd / HAVE_ZSTD_SUPPORT
+
+OPTIONS
+-------
+-q::
+--quiet::
+ Do not print any messages or warnings
+
+ This can be used along with subcommands such as 'perf check feature'
+ to hide unnecessary output in test scripts, eg.
+ 'perf check feature --quiet libtraceevent'
diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
new file mode 100644
index 000000000000..16a04b5456d9
--- /dev/null
+++ b/tools/perf/builtin-check.c
@@ -0,0 +1,180 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "builtin.h"
+#include "color.h"
+#include "util/debug.h"
+#include "util/header.h"
+#include <tools/config.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <subcmd/parse-options.h>
+
+static const char * const check_subcommands[] = { "feature", NULL };
+static struct option check_options[] = {
+ OPT_BOOLEAN('q', "quiet", &quiet, "do not show any warnings or messages"),
+ OPT_END()
+};
+static struct option check_feature_options[] = { OPT_PARENT(check_options) };
+
+static const char *check_usage[] = { NULL, NULL };
+static const char *check_feature_usage[] = {
+ "perf check feature <feature_list>",
+ NULL
+};
+
+struct feature_status supported_features[] = {
+ FEATURE_STATUS("aio", HAVE_AIO_SUPPORT),
+ FEATURE_STATUS("bpf", HAVE_LIBBPF_SUPPORT),
+ FEATURE_STATUS("bpf_skeletons", HAVE_BPF_SKEL),
+ FEATURE_STATUS("debuginfod", HAVE_DEBUGINFOD_SUPPORT),
+ FEATURE_STATUS("dwarf", HAVE_DWARF_SUPPORT),
+ FEATURE_STATUS("dwarf_getlocations", HAVE_DWARF_GETLOCATIONS_SUPPORT),
+ FEATURE_STATUS("dwarf-unwind-support", HAVE_DWARF_UNWIND_SUPPORT),
+ FEATURE_STATUS("get_cpuid", HAVE_AUXTRACE_SUPPORT),
+ FEATURE_STATUS("libaudit", HAVE_LIBAUDIT_SUPPORT),
+ FEATURE_STATUS("libbfd", HAVE_LIBBFD_SUPPORT),
+ FEATURE_STATUS("libcapstone", HAVE_LIBCAPSTONE_SUPPORT),
+ FEATURE_STATUS("libcrypto", HAVE_LIBCRYPTO_SUPPORT),
+ FEATURE_STATUS("libdw-dwarf-unwind", HAVE_DWARF_SUPPORT),
+ FEATURE_STATUS("libelf", HAVE_LIBELF_SUPPORT),
+ FEATURE_STATUS("libnuma", HAVE_LIBNUMA_SUPPORT),
+ FEATURE_STATUS("libopencsd", HAVE_CSTRACE_SUPPORT),
+ FEATURE_STATUS("libperl", HAVE_LIBPERL_SUPPORT),
+ FEATURE_STATUS("libpfm4", HAVE_LIBPFM),
+ FEATURE_STATUS("libpython", HAVE_LIBPYTHON_SUPPORT),
+ FEATURE_STATUS("libslang", HAVE_SLANG_SUPPORT),
+ FEATURE_STATUS("libtraceevent", HAVE_LIBTRACEEVENT),
+ FEATURE_STATUS("libunwind", HAVE_LIBUNWIND_SUPPORT),
+ FEATURE_STATUS("lzma", HAVE_LZMA_SUPPORT),
+ FEATURE_STATUS("numa_num_possible_cpus", HAVE_LIBNUMA_SUPPORT),
+ FEATURE_STATUS("syscall_table", HAVE_SYSCALL_TABLE_SUPPORT),
+ FEATURE_STATUS("zlib", HAVE_ZLIB_SUPPORT),
+ FEATURE_STATUS("zstd", HAVE_ZSTD_SUPPORT),
+
+ /* this should remain at end, to know the array end */
+ FEATURE_STATUS(NULL, _)
+};
+
+static void on_off_print(const char *status)
+{
+ printf("[ ");
+
+ if (!strcmp(status, "OFF"))
+ color_fprintf(stdout, PERF_COLOR_RED, "%-3s", status);
+ else
+ color_fprintf(stdout, PERF_COLOR_GREEN, "%-3s", status);
+
+ printf(" ]");
+}
+
+/* Helper function to print status of a feature along with name/macro */
+static void status_print(const char *name, const char *macro,
+ const char *status)
+{
+ printf("%22s: ", name);
+ on_off_print(status);
+ printf(" # %s\n", macro);
+}
+
+#define STATUS(feature) \
+do { \
+ if (feature.is_builtin) \
+ status_print(feature.name, feature.macro, "on"); \
+ else \
+ status_print(feature.name, feature.macro, "OFF"); \
+} while (0)
+
+/**
+ * check whether "feature" is built-in with perf
+ *
+ * returns:
+ * 0: NOT built-in or Feature not known
+ * 1: Built-in
+ */
+static int has_support(const char *feature)
+{
+ for (int i = 0; supported_features[i].name; ++i) {
+ if ((strcasecmp(feature, supported_features[i].name) == 0) ||
+ (strcasecmp(feature, supported_features[i].macro) == 0)) {
+ if (!quiet)
+ STATUS(supported_features[i]);
+ return supported_features[i].is_builtin;
+ }
+ }
+
+ if (!quiet)
+ pr_err("Unknown feature '%s', please use 'perf version --build-options' to see which ones are available.\n", feature);
+
+ return 0;
+}
+
+
+/**
+ * Usage: 'perf check feature <feature_list>'
+ *
+ * <feature_list> can be a single feature name/macro, or a comma-separated list
+ * of feature names/macros
+ * eg. argument can be "libtraceevent" or "libtraceevent,bpf" etc
+ *
+ * In case of a comma-separated list, feature_enabled will be 1, only if
+ * all features passed in the string are supported
+ *
+ * Note that argv will get modified
+ */
+static int subcommand_feature(int argc, const char **argv)
+{
+ char *feature_list;
+ char *feature_name;
+ int feature_enabled;
+
+ argc = parse_options(argc, argv, check_feature_options,
+ check_feature_usage, 0);
+
+ if (!argc)
+ usage_with_options(check_feature_usage, check_feature_options);
+
+ if (argc > 1) {
+ pr_err("Too many arguments passed to 'perf check feature'\n");
+ return -1;
+ }
+
+ feature_enabled = 1;
+ /* feature_list is a non-const copy of 'argv[0]' */
+ feature_list = strdup(argv[0]);
+ if (!feature_list) {
+ pr_err("ERROR: failed to allocate memory for feature list\n");
+ return -1;
+ }
+
+ feature_name = strtok(feature_list, ",");
+
+ while (feature_name) {
+ feature_enabled &= has_support(feature_name);
+ feature_name = strtok(NULL, ",");
+ }
+
+ free(feature_list);
+
+ return !feature_enabled;
+}
+
+int cmd_check(int argc, const char **argv)
+{
+ argc = parse_options_subcommand(argc, argv, check_options,
+ check_subcommands, check_usage, 0);
+
+ if (!argc)
+ usage_with_options(check_usage, check_options);
+
+ if (strcmp(argv[0], "feature") == 0)
+ return subcommand_feature(argc, argv);
+
+ /* If no subcommand matched above, print usage help */
+ pr_err("Unknown subcommand: %s\n", argv[0]);
+ usage_with_options(check_usage, check_options);
+
+ /* free usage string allocated by parse_options_subcommand */
+ free((void *)check_usage[0]);
+
+ return 0;
+}
diff --git a/tools/perf/builtin.h b/tools/perf/builtin.h
index f4375deabfa3..94f4b3769bf7 100644
--- a/tools/perf/builtin.h
+++ b/tools/perf/builtin.h
@@ -2,6 +2,22 @@
#ifndef BUILTIN_H
#define BUILTIN_H
+#include <stddef.h>
+#include <linux/compiler.h>
+#include <tools/config.h>
+
+struct feature_status {
+ const char *name;
+ const char *macro;
+ int is_builtin;
+};
+
+#define FEATURE_STATUS(name_, macro_) { \
+ .name = name_, \
+ .macro = #macro_, \
+ .is_builtin = IS_BUILTIN(macro_) }
+
+extern struct feature_status supported_features[];
struct cmdnames;
void list_common_cmds_help(void);
@@ -11,6 +27,7 @@ int cmd_annotate(int argc, const char **argv);
int cmd_bench(int argc, const char **argv);
int cmd_buildid_cache(int argc, const char **argv);
int cmd_buildid_list(int argc, const char **argv);
+int cmd_check(int argc, const char **argv);
int cmd_config(int argc, const char **argv);
int cmd_c2c(int argc, const char **argv);
int cmd_diff(int argc, const char **argv);
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index bd3f80b5bb46..4def800f4089 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -52,6 +52,7 @@ static struct cmd_struct commands[] = {
{ "archive", NULL, 0 },
{ "buildid-cache", cmd_buildid_cache, 0 },
{ "buildid-list", cmd_buildid_list, 0 },
+ { "check", cmd_check, 0 },
{ "config", cmd_config, 0 },
{ "c2c", cmd_c2c, 0 },
{ "diff", cmd_diff, 0 },
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 1/7] tools/lib/subcmd: Don't free the usage string Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 2/7] perf check: Introduce 'check' subcommand Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 13:05 ` Arnaldo Carvalho de Melo
2024-09-04 6:18 ` [PATCH v14 4/7] tools/perf/tests: Update test_task_analyzer.sh to use perf check feature Aditya Gupta
` (3 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
Now that the feature list has been duplicated in a global
'supported_features' array, use that array instead of manually checking
status of built-in features.
This helps in being consistent with commands such as 'perf check feature',
so commands can use the same array, and any new feature can be added at
one place, in the 'supported_features' array
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
tools/perf/builtin-version.c | 43 +++++++-----------------------------
1 file changed, 8 insertions(+), 35 deletions(-)
diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
index 398aa53e9e2e..e149d96c6dc5 100644
--- a/tools/perf/builtin-version.c
+++ b/tools/perf/builtin-version.c
@@ -46,45 +46,18 @@ static void status_print(const char *name, const char *macro,
printf(" # %s\n", macro);
}
-#define STATUS(__d, __m) \
-do { \
- if (IS_BUILTIN(__d)) \
- status_print(#__m, #__d, "on"); \
- else \
- status_print(#__m, #__d, "OFF"); \
+#define STATUS(feature) \
+do { \
+ if (feature.is_builtin) \
+ status_print(feature.name, feature.macro, "on"); \
+ else \
+ status_print(feature.name, feature.macro, "OFF"); \
} while (0)
static void library_status(void)
{
- STATUS(HAVE_DWARF_SUPPORT, dwarf);
- STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
-#ifndef HAVE_SYSCALL_TABLE_SUPPORT
- STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
-#endif
- STATUS(HAVE_SYSCALL_TABLE_SUPPORT, syscall_table);
- STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
- STATUS(HAVE_DEBUGINFOD_SUPPORT, debuginfod);
- STATUS(HAVE_LIBELF_SUPPORT, libelf);
- STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
- STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
- STATUS(HAVE_LIBPERL_SUPPORT, libperl);
- STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
- STATUS(HAVE_SLANG_SUPPORT, libslang);
- STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
- STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
- STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
- STATUS(HAVE_LIBCAPSTONE_SUPPORT, libcapstone);
- STATUS(HAVE_ZLIB_SUPPORT, zlib);
- STATUS(HAVE_LZMA_SUPPORT, lzma);
- STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
- STATUS(HAVE_LIBBPF_SUPPORT, bpf);
- STATUS(HAVE_AIO_SUPPORT, aio);
- STATUS(HAVE_ZSTD_SUPPORT, zstd);
- STATUS(HAVE_LIBPFM, libpfm4);
- STATUS(HAVE_LIBTRACEEVENT, libtraceevent);
- STATUS(HAVE_BPF_SKEL, bpf_skeletons);
- STATUS(HAVE_DWARF_UNWIND_SUPPORT, dwarf-unwind-support);
- STATUS(HAVE_CSTRACE_SUPPORT, libopencsd);
+ for (int i = 0; supported_features[i].name; ++i)
+ STATUS(supported_features[i]);
}
int cmd_version(int argc, const char **argv)
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* Re: [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array
2024-09-04 6:18 ` [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array Aditya Gupta
@ 2024-09-04 13:05 ` Arnaldo Carvalho de Melo
2024-09-04 19:06 ` Aditya Gupta
0 siblings, 1 reply; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2024-09-04 13:05 UTC (permalink / raw)
To: Aditya Gupta
Cc: Jiri Olsa, Ian Rogers, Namhyung Kim, linux-perf-users, maddy,
atrajeev, kjain, disgoel
On Wed, Sep 04, 2024 at 11:48:32AM +0530, Aditya Gupta wrote:
> Now that the feature list has been duplicated in a global
> 'supported_features' array, use that array instead of manually checking
> status of built-in features.
>
> This helps in being consistent with commands such as 'perf check feature',
> so commands can use the same array, and any new feature can be added at
> one place, in the 'supported_features' array
So I tested and applied the first two patches, but it is failing for
this 3rd, please rebase from what is in the tmp.perf-tools-next branch
at:
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
- Arnaldo
> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Ian Rogers <irogers@google.com>
> Cc: Kajol Jain <kjain@linux.ibm.com>
> Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Acked-by: Namhyung Kim <namhyung@kernel.org>
> Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
> Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
> ---
> tools/perf/builtin-version.c | 43 +++++++-----------------------------
> 1 file changed, 8 insertions(+), 35 deletions(-)
>
> diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
> index 398aa53e9e2e..e149d96c6dc5 100644
> --- a/tools/perf/builtin-version.c
> +++ b/tools/perf/builtin-version.c
> @@ -46,45 +46,18 @@ static void status_print(const char *name, const char *macro,
> printf(" # %s\n", macro);
> }
>
> -#define STATUS(__d, __m) \
> -do { \
> - if (IS_BUILTIN(__d)) \
> - status_print(#__m, #__d, "on"); \
> - else \
> - status_print(#__m, #__d, "OFF"); \
> +#define STATUS(feature) \
> +do { \
> + if (feature.is_builtin) \
> + status_print(feature.name, feature.macro, "on"); \
> + else \
> + status_print(feature.name, feature.macro, "OFF"); \
> } while (0)
>
> static void library_status(void)
> {
> - STATUS(HAVE_DWARF_SUPPORT, dwarf);
> - STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
> -#ifndef HAVE_SYSCALL_TABLE_SUPPORT
> - STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
> -#endif
> - STATUS(HAVE_SYSCALL_TABLE_SUPPORT, syscall_table);
> - STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
> - STATUS(HAVE_DEBUGINFOD_SUPPORT, debuginfod);
> - STATUS(HAVE_LIBELF_SUPPORT, libelf);
> - STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
> - STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
> - STATUS(HAVE_LIBPERL_SUPPORT, libperl);
> - STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
> - STATUS(HAVE_SLANG_SUPPORT, libslang);
> - STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
> - STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
> - STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
> - STATUS(HAVE_LIBCAPSTONE_SUPPORT, libcapstone);
> - STATUS(HAVE_ZLIB_SUPPORT, zlib);
> - STATUS(HAVE_LZMA_SUPPORT, lzma);
> - STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
> - STATUS(HAVE_LIBBPF_SUPPORT, bpf);
> - STATUS(HAVE_AIO_SUPPORT, aio);
> - STATUS(HAVE_ZSTD_SUPPORT, zstd);
> - STATUS(HAVE_LIBPFM, libpfm4);
> - STATUS(HAVE_LIBTRACEEVENT, libtraceevent);
> - STATUS(HAVE_BPF_SKEL, bpf_skeletons);
> - STATUS(HAVE_DWARF_UNWIND_SUPPORT, dwarf-unwind-support);
> - STATUS(HAVE_CSTRACE_SUPPORT, libopencsd);
> + for (int i = 0; supported_features[i].name; ++i)
> + STATUS(supported_features[i]);
> }
>
> int cmd_version(int argc, const char **argv)
> --
> 2.46.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array
2024-09-04 13:05 ` Arnaldo Carvalho de Melo
@ 2024-09-04 19:06 ` Aditya Gupta
2024-09-04 19:15 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 19:06 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo
Cc: Jiri Olsa, Ian Rogers, Namhyung Kim, linux-perf-users, maddy,
atrajeev, kjain, disgoel
Hi Arnaldo,
On 04/09/24 18:35, Arnaldo Carvalho de Melo wrote:
> On Wed, Sep 04, 2024 at 11:48:32AM +0530, Aditya Gupta wrote:
>> Now that the feature list has been duplicated in a global
>> 'supported_features' array, use that array instead of manually checking
>> status of built-in features.
>>
>> This helps in being consistent with commands such as 'perf check feature',
>> so commands can use the same array, and any new feature can be added at
>> one place, in the 'supported_features' array
> So I tested and applied the first two patches, but it is failing for
> this 3rd, please rebase from what is in the tmp.perf-tools-next branch
> at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
Thank you !
I have rebased the patches in v15.
Patch #1 & #2, are same as already applied in tmp.perf-tools-next
branch, so they can be ignored or even if applied git am should ignore them.
- Aditya Gupta
> - Arnaldo
>
>> Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
>> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
>> Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
>> Cc: Jiri Olsa <jolsa@kernel.org>
>> Cc: Ian Rogers <irogers@google.com>
>> Cc: Kajol Jain <kjain@linux.ibm.com>
>> Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
>> Cc: Namhyung Kim <namhyung@kernel.org>
>> Acked-by: Namhyung Kim <namhyung@kernel.org>
>> Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
>> Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
>> ---
>> tools/perf/builtin-version.c | 43 +++++++-----------------------------
>> 1 file changed, 8 insertions(+), 35 deletions(-)
>>
>> diff --git a/tools/perf/builtin-version.c b/tools/perf/builtin-version.c
>> index 398aa53e9e2e..e149d96c6dc5 100644
>> --- a/tools/perf/builtin-version.c
>> +++ b/tools/perf/builtin-version.c
>> @@ -46,45 +46,18 @@ static void status_print(const char *name, const char *macro,
>> printf(" # %s\n", macro);
>> }
>>
>> -#define STATUS(__d, __m) \
>> -do { \
>> - if (IS_BUILTIN(__d)) \
>> - status_print(#__m, #__d, "on"); \
>> - else \
>> - status_print(#__m, #__d, "OFF"); \
>> +#define STATUS(feature) \
>> +do { \
>> + if (feature.is_builtin) \
>> + status_print(feature.name, feature.macro, "on"); \
>> + else \
>> + status_print(feature.name, feature.macro, "OFF"); \
>> } while (0)
>>
>> static void library_status(void)
>> {
>> - STATUS(HAVE_DWARF_SUPPORT, dwarf);
>> - STATUS(HAVE_DWARF_GETLOCATIONS_SUPPORT, dwarf_getlocations);
>> -#ifndef HAVE_SYSCALL_TABLE_SUPPORT
>> - STATUS(HAVE_LIBAUDIT_SUPPORT, libaudit);
>> -#endif
>> - STATUS(HAVE_SYSCALL_TABLE_SUPPORT, syscall_table);
>> - STATUS(HAVE_LIBBFD_SUPPORT, libbfd);
>> - STATUS(HAVE_DEBUGINFOD_SUPPORT, debuginfod);
>> - STATUS(HAVE_LIBELF_SUPPORT, libelf);
>> - STATUS(HAVE_LIBNUMA_SUPPORT, libnuma);
>> - STATUS(HAVE_LIBNUMA_SUPPORT, numa_num_possible_cpus);
>> - STATUS(HAVE_LIBPERL_SUPPORT, libperl);
>> - STATUS(HAVE_LIBPYTHON_SUPPORT, libpython);
>> - STATUS(HAVE_SLANG_SUPPORT, libslang);
>> - STATUS(HAVE_LIBCRYPTO_SUPPORT, libcrypto);
>> - STATUS(HAVE_LIBUNWIND_SUPPORT, libunwind);
>> - STATUS(HAVE_DWARF_SUPPORT, libdw-dwarf-unwind);
>> - STATUS(HAVE_LIBCAPSTONE_SUPPORT, libcapstone);
>> - STATUS(HAVE_ZLIB_SUPPORT, zlib);
>> - STATUS(HAVE_LZMA_SUPPORT, lzma);
>> - STATUS(HAVE_AUXTRACE_SUPPORT, get_cpuid);
>> - STATUS(HAVE_LIBBPF_SUPPORT, bpf);
>> - STATUS(HAVE_AIO_SUPPORT, aio);
>> - STATUS(HAVE_ZSTD_SUPPORT, zstd);
>> - STATUS(HAVE_LIBPFM, libpfm4);
>> - STATUS(HAVE_LIBTRACEEVENT, libtraceevent);
>> - STATUS(HAVE_BPF_SKEL, bpf_skeletons);
>> - STATUS(HAVE_DWARF_UNWIND_SUPPORT, dwarf-unwind-support);
>> - STATUS(HAVE_CSTRACE_SUPPORT, libopencsd);
>> + for (int i = 0; supported_features[i].name; ++i)
>> + STATUS(supported_features[i]);
>> }
>>
>> int cmd_version(int argc, const char **argv)
>> --
>> 2.46.0
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array
2024-09-04 19:06 ` Aditya Gupta
@ 2024-09-04 19:15 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2024-09-04 19:15 UTC (permalink / raw)
To: Aditya Gupta
Cc: Jiri Olsa, Ian Rogers, Namhyung Kim, linux-perf-users, maddy,
atrajeev, kjain, disgoel
On Thu, Sep 05, 2024 at 12:36:21AM +0530, Aditya Gupta wrote:
> Hi Arnaldo,
>
> On 04/09/24 18:35, Arnaldo Carvalho de Melo wrote:
>
> > On Wed, Sep 04, 2024 at 11:48:32AM +0530, Aditya Gupta wrote:
> > > Now that the feature list has been duplicated in a global
> > > 'supported_features' array, use that array instead of manually checking
> > > status of built-in features.
> > >
> > > This helps in being consistent with commands such as 'perf check feature',
> > > so commands can use the same array, and any new feature can be added at
> > > one place, in the 'supported_features' array
> > So I tested and applied the first two patches, but it is failing for
> > this 3rd, please rebase from what is in the tmp.perf-tools-next branch
> > at:
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
>
> Thank you !
>
> I have rebased the patches in v15.
>
> Patch #1 & #2, are same as already applied in tmp.perf-tools-next branch, so
> they can be ignored or even if applied git am should ignore them.
I dit it with:
[acme@toolbox perf-tools-next]$ b4 am -P3-7 -ctsl --cc-trailers 20240904190132.415212-1-adityag@linux.ibm.com
Grabbing thread from lore.kernel.org/all/20240904190132.415212-1-adityag@linux.ibm.com/t.mbox.gz
Checking for newer revisions
Grabbing search results from lore.kernel.org
Nothing matching that query.
Analyzing 8 messages in the thread
Looking for additional code-review trailers on lore.kernel.org
Checking attestation on all messages, may take a moment...
---
✓ [PATCH v15 3/7] perf version: Update --build-options to use 'supported_features' array
+ Link: https://lore.kernel.org/r/20240904190132.415212-4-adityag@linux.ibm.com
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
✓ [PATCH v15 4/7] tools/perf/tests: Update test_task_analyzer.sh to use perf check feature
+ Link: https://lore.kernel.org/r/20240904190132.415212-5-adityag@linux.ibm.com
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
✓ [PATCH v15 5/7] tools/perf/tests: Update probe_vfs_getname.sh script to use perf check feature
+ Link: https://lore.kernel.org/r/20240904190132.415212-6-adityag@linux.ibm.com
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
✓ [PATCH v15 6/7] perf: Fix inconsistencies in feature names
+ Link: https://lore.kernel.org/r/20240904190132.415212-7-adityag@linux.ibm.com
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
✓ [PATCH v15 7/7] perf: Add more features to supported_features list
+ Link: https://lore.kernel.org/r/20240904190132.415212-8-adityag@linux.ibm.com
+ Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
✓ Signed: DKIM/ibm.com (From: adityag@linux.ibm.com)
---
Total patches: 5 (cherrypicked: 3-7)
---
Cover: ./v15_20240905_adityag_introduce_perf_check_subcommand.cover
Link: https://lore.kernel.org/r/20240904190132.415212-1-adityag@linux.ibm.com
Base: not specified
git am ./v15_20240905_adityag_introduce_perf_check_subcommand.mbx
⬢[acme@toolbox perf-tools-next]$
⬢[acme@toolbox perf-tools-next]$ git am ./v15_20240905_adityag_introduce_perf_check_subcommand.mbx
Applying: perf version: Update --build-options to use 'supported_features' array
Applying: tools/perf/tests: Update test_task_analyzer.sh to use perf check feature
Applying: tools/perf/tests: Update probe_vfs_getname.sh script to use perf check feature
Applying: perf: Fix inconsistencies in feature names
Applying: perf: Add more features to supported_features list
⬢[acme@toolbox perf-tools-next]$
Now test building it one after the other and then the container builds,
eventually will flow to perf-tools-next.
Thanks for persisting and collaborating!
- Arnaldo
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v14 4/7] tools/perf/tests: Update test_task_analyzer.sh to use perf check feature
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
` (2 preceding siblings ...)
2024-09-04 6:18 ` [PATCH v14 3/7] perf version: Update --build-options to use 'supported_features' array Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 5/7] tools/perf/tests: Update probe_vfs_getname.sh script " Aditya Gupta
` (2 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
Currently we use output of 'perf version --build-options', to check
whether perf was built with libtraceevent support.
Instead, use 'perf check feature libtraceevent' to check for
libtraceevent support.
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
tools/perf/tests/shell/test_task_analyzer.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh
index cb02bf23e6a5..7d76fc63d995 100755
--- a/tools/perf/tests/shell/test_task_analyzer.sh
+++ b/tools/perf/tests/shell/test_task_analyzer.sh
@@ -55,8 +55,8 @@ find_str_or_fail() {
# check if perf is compiled with libtraceevent support
skip_no_probe_record_support() {
- perf version --build-options | grep -q " OFF .* HAVE_LIBTRACEEVENT" && return 2
- return 0
+ perf check feature -q libtraceevent && return 0
+ return 2
}
prepare_perf_data() {
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v14 5/7] tools/perf/tests: Update probe_vfs_getname.sh script to use perf check feature
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
` (3 preceding siblings ...)
2024-09-04 6:18 ` [PATCH v14 4/7] tools/perf/tests: Update test_task_analyzer.sh to use perf check feature Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 6/7] perf: Fix inconsistencies in feature names Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 7/7] perf: Add more features to supported_features list Aditya Gupta
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
In probe_vfs_getname.sh, current we use "perf record --dry-run"
to check for libtraceevent and skip the test if perf is not
build with libtraceevent. Change the check to use "perf check feature"
option
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
---
tools/perf/tests/shell/lib/probe_vfs_getname.sh | 4 ++--
tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 5 ++++-
tools/perf/tests/shell/record+script_probe_vfs_getname.sh | 5 ++++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/tools/perf/tests/shell/lib/probe_vfs_getname.sh b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
index b3802d9494b4..0606e693eb59 100644
--- a/tools/perf/tests/shell/lib/probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/lib/probe_vfs_getname.sh
@@ -32,7 +32,7 @@ skip_if_no_debuginfo() {
# check if perf is compiled with libtraceevent support
skip_no_probe_record_support() {
if [ $had_vfs_getname -eq 1 ] ; then
- perf record --dry-run -e $1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2
- return 1
+ perf check feature -q libtraceevent && return 1
+ return 2
fi
}
diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
index 72c65570db37..f38c8ead0b03 100755
--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -63,7 +63,10 @@ trace_libc_inet_pton_backtrace() {
# Check presence of libtraceevent support to run perf record
skip_no_probe_record_support "$event_name/$eventattr/"
- [ $? -eq 2 ] && return 2
+ if [ $? -eq 2 ]; then
+ echo "WARN: Skipping test trace_libc_inet_pton_backtrace. No libtraceevent support."
+ return 2
+ fi
perf record -e $event_name/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > /dev/null 2>&1
# check if perf data file got created in above step.
diff --git a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
index 5eedbe29bba1..9a61928e3c9a 100755
--- a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
@@ -21,7 +21,10 @@ record_open_file() {
echo "Recording open file:"
# Check presence of libtraceevent support to run perf record
skip_no_probe_record_support "probe:vfs_getname*"
- [ $? -eq 2 ] && return 2
+ if [ $? -eq 2 ]; then
+ echo "WARN: Skipping test record_open_file. No libtraceevent support"
+ return 2
+ fi
perf record -o ${perfdata} -e probe:vfs_getname\* touch $file
}
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v14 6/7] perf: Fix inconsistencies in feature names
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
` (4 preceding siblings ...)
2024-09-04 6:18 ` [PATCH v14 5/7] tools/perf/tests: Update probe_vfs_getname.sh script " Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
2024-09-04 6:18 ` [PATCH v14 7/7] perf: Add more features to supported_features list Aditya Gupta
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
Fix two inconsistencies in feature names as discussed in [1]:
1. Rename "dwarf-unwind-support" to "dwarf-unwind"
2. 'get_cpuid' feature and 'HAVE_AUXTRACE_SUPPORT' names don't
look related, change the feature name to 'auxtrace' to match the
macro name, as 'get_cpuid' string is not used anywhere to check the
feature presence
[1]: https://lore.kernel.org/linux-perf-users/ZoRw5we4HLSTZND6@x1/
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
tools/perf/Documentation/perf-check.txt | 4 ++--
tools/perf/builtin-check.c | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt
index b081514d240a..10f69fb6850b 100644
--- a/tools/perf/Documentation/perf-check.txt
+++ b/tools/perf/Documentation/perf-check.txt
@@ -49,8 +49,8 @@ feature::
debuginfod / HAVE_DEBUGINFOD_SUPPORT
dwarf / HAVE_DWARF_SUPPORT
dwarf_getlocations / HAVE_DWARF_GETLOCATIONS_SUPPORT
- dwarf-unwind-support / HAVE_DWARF_UNWIND_SUPPORT
- get_cpuid / HAVE_AUXTRACE_SUPPORT
+ dwarf-unwind / HAVE_DWARF_UNWIND_SUPPORT
+ auxtrace / HAVE_AUXTRACE_SUPPORT
libaudit / HAVE_LIBAUDIT_SUPPORT
libbfd / HAVE_LIBBFD_SUPPORT
libcapstone / HAVE_LIBCAPSTONE_SUPPORT
diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
index 16a04b5456d9..0b76b6e42b78 100644
--- a/tools/perf/builtin-check.c
+++ b/tools/perf/builtin-check.c
@@ -29,8 +29,8 @@ struct feature_status supported_features[] = {
FEATURE_STATUS("debuginfod", HAVE_DEBUGINFOD_SUPPORT),
FEATURE_STATUS("dwarf", HAVE_DWARF_SUPPORT),
FEATURE_STATUS("dwarf_getlocations", HAVE_DWARF_GETLOCATIONS_SUPPORT),
- FEATURE_STATUS("dwarf-unwind-support", HAVE_DWARF_UNWIND_SUPPORT),
- FEATURE_STATUS("get_cpuid", HAVE_AUXTRACE_SUPPORT),
+ FEATURE_STATUS("dwarf-unwind", HAVE_DWARF_UNWIND_SUPPORT),
+ FEATURE_STATUS("auxtrace", HAVE_AUXTRACE_SUPPORT),
FEATURE_STATUS("libaudit", HAVE_LIBAUDIT_SUPPORT),
FEATURE_STATUS("libbfd", HAVE_LIBBFD_SUPPORT),
FEATURE_STATUS("libcapstone", HAVE_LIBCAPSTONE_SUPPORT),
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread* [PATCH v14 7/7] perf: Add more features to supported_features list
2024-09-04 6:18 [PATCH v14 0/7] Introduce perf check subcommand Aditya Gupta
` (5 preceding siblings ...)
2024-09-04 6:18 ` [PATCH v14 6/7] perf: Fix inconsistencies in feature names Aditya Gupta
@ 2024-09-04 6:18 ` Aditya Gupta
6 siblings, 0 replies; 11+ messages in thread
From: Aditya Gupta @ 2024-09-04 6:18 UTC (permalink / raw)
To: acme, jolsa, irogers, namhyung
Cc: linux-perf-users, maddy, atrajeev, kjain, disgoel
As suggested in [1], add more feature names and corresponding names,
based on the information in Makefile.config
The entries were added after seeing the corresponding -D option which is
added to CFLAGS, based on the presence of a feature in Makefile.config,
such as:
ifeq ($(feature-file-handle), 1)
CFLAGS += -DHAVE_FILE_HANDLE
endif
For above feature 'file-handle', corresponding entry has been added to
supported_features as below:
FEATURE_STATUS("file-handle", HAVE_FILE_HANDLE)
[1]: https://lore.kernel.org/linux-perf-users/Zn7EvDbsnlbLXj4g@x1/
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Disha Goel <disgoel@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
---
Could not add below features to the list:
* 'fortify-source': is a compiler option, doesn't add any feature MACRO
* 'stackprotector-all': is a compiler option, doesn't add any feature MACRO
* 'libtracefs': defines 'LIBTRACEFS_VERSION', not something like 'HAVE_LIBTRACEFS_SUPPORT'
* 'reallocarray': it's absence is known by 'COMPAT_NEED_REALLOCARRAY', but no flag for 'presence' of feature
Also, few names may feel inconsistent, but left as is:
* 'HAVE_GETTID': could be 'HAVE_GETTID_SUPPORT'
* 'LIBC_SUPPORT': could be 'HAVE_LIBC_SUPPORT'
* 'HAVE_LIBNUMA_SUPPORT': used by both 'numa_num_possible_cpus' and
'libnuma', can remove one of those
* Currently some features have '_' in name, others have '-'
---
---
tools/perf/Documentation/perf-check.txt | 78 ++++++++++++++++---------
tools/perf/builtin-check.c | 28 ++++++++-
2 files changed, 77 insertions(+), 29 deletions(-)
diff --git a/tools/perf/Documentation/perf-check.txt b/tools/perf/Documentation/perf-check.txt
index 10f69fb6850b..cc1fe02ca01a 100644
--- a/tools/perf/Documentation/perf-check.txt
+++ b/tools/perf/Documentation/perf-check.txt
@@ -43,33 +43,57 @@ feature::
perf check feature libtraceevent,bpf
Supported feature names/macro:
- aio / HAVE_AIO_SUPPORT
- bpf / HAVE_LIBBPF_SUPPORT
- bpf_skeletons / HAVE_BPF_SKEL
- debuginfod / HAVE_DEBUGINFOD_SUPPORT
- dwarf / HAVE_DWARF_SUPPORT
- dwarf_getlocations / HAVE_DWARF_GETLOCATIONS_SUPPORT
- dwarf-unwind / HAVE_DWARF_UNWIND_SUPPORT
- auxtrace / HAVE_AUXTRACE_SUPPORT
- libaudit / HAVE_LIBAUDIT_SUPPORT
- libbfd / HAVE_LIBBFD_SUPPORT
- libcapstone / HAVE_LIBCAPSTONE_SUPPORT
- libcrypto / HAVE_LIBCRYPTO_SUPPORT
- libdw-dwarf-unwind / HAVE_DWARF_SUPPORT
- libelf / HAVE_LIBELF_SUPPORT
- libnuma / HAVE_LIBNUMA_SUPPORT
- libopencsd / HAVE_CSTRACE_SUPPORT
- libperl / HAVE_LIBPERL_SUPPORT
- libpfm4 / HAVE_LIBPFM
- libpython / HAVE_LIBPYTHON_SUPPORT
- libslang / HAVE_SLANG_SUPPORT
- libtraceevent / HAVE_LIBTRACEEVENT
- libunwind / HAVE_LIBUNWIND_SUPPORT
- lzma / HAVE_LZMA_SUPPORT
- numa_num_possible_cpus / HAVE_LIBNUMA_SUPPORT
- syscall_table / HAVE_SYSCALL_TABLE_SUPPORT
- zlib / HAVE_ZLIB_SUPPORT
- zstd / HAVE_ZSTD_SUPPORT
+ aio / HAVE_AIO_SUPPORT
+ auxtrace / HAVE_AUXTRACE_SUPPORT
+ backtrace / HAVE_BACKTRACE_SUPPORT
+ bpf / HAVE_LIBBPF_SUPPORT
+ bpf_skeletons / HAVE_BPF_SKEL
+ debuginfod / HAVE_DEBUGINFOD_SUPPORT
+ disassembler-four-args / DISASM_FOUR_ARGS_SIGNATURE
+ disassembler-init-styled / DISASM_INIT_STYLED
+ dwarf_getcfi / HAVE_DWARF_CFI_SUPPORT
+ dwarf_getlocations / HAVE_DWARF_GETLOCATIONS_SUPPORT
+ dwarf / HAVE_DWARF_SUPPORT
+ dwarf-unwind / HAVE_DWARF_UNWIND_SUPPORT
+ eventfd / HAVE_EVENTFD_SUPPORT
+ file-handle / HAVE_FILE_HANDLE
+ get_current_dir_name / HAVE_GET_CURRENT_DIR_NAME
+ gettid / HAVE_GETTID
+ glibc / LIBC_SUPPORT
+ libaio / HAVE_AIO_SUPPORT
+ libaudit / HAVE_LIBAUDIT_SUPPORT
+ libbfd-buildid / HAVE_LIBBFD_BUILDID_SUPPORT
+ libbfd / HAVE_LIBBFD_SUPPORT
+ libcap / HAVE_LIBCAP_SUPPORT
+ libcapstone / HAVE_LIBCAPSTONE_SUPPORT
+ libcrypto / HAVE_LIBCRYPTO_SUPPORT
+ libdw-dwarf-unwind / HAVE_DWARF_SUPPORT
+ libelf-gelf_getnote / HAVE_GELF_GETNOTE_SUPPORT
+ libelf-getphdrnum / HAVE_ELF_GETPHDRNUM_SUPPORT
+ libelf-getshdrstrndx / HAVE_ELF_GETSHDRSTRNDX_SUPPORT
+ libelf / HAVE_LIBELF_SUPPORT
+ libnuma / HAVE_LIBNUMA_SUPPORT
+ libopencsd / HAVE_CSTRACE_SUPPORT
+ libperl / HAVE_LIBPERL_SUPPORT
+ libpfm4 / HAVE_LIBPFM
+ libpython / HAVE_LIBPYTHON_SUPPORT
+ libslang / HAVE_SLANG_SUPPORT
+ libslang-include-subdir / HAVE_SLANG_INCLUDE_SUBDIR
+ libtraceevent / HAVE_LIBTRACEEVENT
+ libunwind / HAVE_LIBUNWIND_SUPPORT
+ libzstd / HAVE_ZSTD_SUPPORT
+ lzma / HAVE_LZMA_SUPPORT
+ numa_num_possible_cpus / HAVE_LIBNUMA_SUPPORT
+ pthread-attr-setaffinity-np / HAVE_PTHREAD_ATTR_SETAFFINITY_NP
+ pthread-barrier / HAVE_PTHREAD_BARRIER
+ scandirat / HAVE_SCANDIRAT_SUPPORT
+ sched_getcpu / HAVE_SCHED_GETCPU_SUPPORT
+ sdt / HAVE_SDT_EVENT
+ setns / HAVE_SETNS_SUPPORT
+ syscall_table / HAVE_SYSCALL_TABLE_SUPPORT
+ timerfd / HAVE_TIMERFD_SUPPORT
+ zlib / HAVE_ZLIB_SUPPORT
+ zstd / HAVE_ZSTD_SUPPORT
OPTIONS
-------
diff --git a/tools/perf/builtin-check.c b/tools/perf/builtin-check.c
index 0b76b6e42b78..8c1deee80a68 100644
--- a/tools/perf/builtin-check.c
+++ b/tools/perf/builtin-check.c
@@ -24,18 +24,33 @@ static const char *check_feature_usage[] = {
struct feature_status supported_features[] = {
FEATURE_STATUS("aio", HAVE_AIO_SUPPORT),
+ FEATURE_STATUS("auxtrace", HAVE_AUXTRACE_SUPPORT),
+ FEATURE_STATUS("backtrace", HAVE_BACKTRACE_SUPPORT),
FEATURE_STATUS("bpf", HAVE_LIBBPF_SUPPORT),
FEATURE_STATUS("bpf_skeletons", HAVE_BPF_SKEL),
FEATURE_STATUS("debuginfod", HAVE_DEBUGINFOD_SUPPORT),
- FEATURE_STATUS("dwarf", HAVE_DWARF_SUPPORT),
+ FEATURE_STATUS("disassembler-four-args", DISASM_FOUR_ARGS_SIGNATURE),
+ FEATURE_STATUS("disassembler-init-styled", DISASM_INIT_STYLED),
+ FEATURE_STATUS("dwarf_getcfi", HAVE_DWARF_CFI_SUPPORT),
FEATURE_STATUS("dwarf_getlocations", HAVE_DWARF_GETLOCATIONS_SUPPORT),
+ FEATURE_STATUS("dwarf", HAVE_DWARF_SUPPORT),
FEATURE_STATUS("dwarf-unwind", HAVE_DWARF_UNWIND_SUPPORT),
- FEATURE_STATUS("auxtrace", HAVE_AUXTRACE_SUPPORT),
+ FEATURE_STATUS("eventfd", HAVE_EVENTFD_SUPPORT),
+ FEATURE_STATUS("file-handle", HAVE_FILE_HANDLE),
+ FEATURE_STATUS("get_current_dir_name", HAVE_GET_CURRENT_DIR_NAME),
+ FEATURE_STATUS("gettid", HAVE_GETTID),
+ FEATURE_STATUS("glibc", LIBC_SUPPORT),
+ FEATURE_STATUS("libaio", HAVE_AIO_SUPPORT),
FEATURE_STATUS("libaudit", HAVE_LIBAUDIT_SUPPORT),
+ FEATURE_STATUS("libbfd-buildid", HAVE_LIBBFD_BUILDID_SUPPORT),
FEATURE_STATUS("libbfd", HAVE_LIBBFD_SUPPORT),
+ FEATURE_STATUS("libcap", HAVE_LIBCAP_SUPPORT),
FEATURE_STATUS("libcapstone", HAVE_LIBCAPSTONE_SUPPORT),
FEATURE_STATUS("libcrypto", HAVE_LIBCRYPTO_SUPPORT),
FEATURE_STATUS("libdw-dwarf-unwind", HAVE_DWARF_SUPPORT),
+ FEATURE_STATUS("libelf-gelf_getnote", HAVE_GELF_GETNOTE_SUPPORT),
+ FEATURE_STATUS("libelf-getphdrnum", HAVE_ELF_GETPHDRNUM_SUPPORT),
+ FEATURE_STATUS("libelf-getshdrstrndx", HAVE_ELF_GETSHDRSTRNDX_SUPPORT),
FEATURE_STATUS("libelf", HAVE_LIBELF_SUPPORT),
FEATURE_STATUS("libnuma", HAVE_LIBNUMA_SUPPORT),
FEATURE_STATUS("libopencsd", HAVE_CSTRACE_SUPPORT),
@@ -43,11 +58,20 @@ struct feature_status supported_features[] = {
FEATURE_STATUS("libpfm4", HAVE_LIBPFM),
FEATURE_STATUS("libpython", HAVE_LIBPYTHON_SUPPORT),
FEATURE_STATUS("libslang", HAVE_SLANG_SUPPORT),
+ FEATURE_STATUS("libslang-include-subdir", HAVE_SLANG_INCLUDE_SUBDIR),
FEATURE_STATUS("libtraceevent", HAVE_LIBTRACEEVENT),
FEATURE_STATUS("libunwind", HAVE_LIBUNWIND_SUPPORT),
+ FEATURE_STATUS("libzstd", HAVE_ZSTD_SUPPORT),
FEATURE_STATUS("lzma", HAVE_LZMA_SUPPORT),
FEATURE_STATUS("numa_num_possible_cpus", HAVE_LIBNUMA_SUPPORT),
+ FEATURE_STATUS("pthread-attr-setaffinity-np", HAVE_PTHREAD_ATTR_SETAFFINITY_NP),
+ FEATURE_STATUS("pthread-barrier", HAVE_PTHREAD_BARRIER),
+ FEATURE_STATUS("scandirat", HAVE_SCANDIRAT_SUPPORT),
+ FEATURE_STATUS("sched_getcpu", HAVE_SCHED_GETCPU_SUPPORT),
+ FEATURE_STATUS("sdt", HAVE_SDT_EVENT),
+ FEATURE_STATUS("setns", HAVE_SETNS_SUPPORT),
FEATURE_STATUS("syscall_table", HAVE_SYSCALL_TABLE_SUPPORT),
+ FEATURE_STATUS("timerfd", HAVE_TIMERFD_SUPPORT),
FEATURE_STATUS("zlib", HAVE_ZLIB_SUPPORT),
FEATURE_STATUS("zstd", HAVE_ZSTD_SUPPORT),
--
2.46.0
^ permalink raw reply related [flat|nested] 11+ messages in thread