]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
drop all perf patches from 5.15 queue.
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Oct 2022 17:44:53 +0000 (19:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 4 Oct 2022 17:44:53 +0000 (19:44 +0200)
Not needed here, something went wrong with a dependancy checker...

queue-5.15/perf-list-display-hybrid-pmu-events-with-cpu-type.patch [deleted file]
queue-5.15/perf-metric-add-documentation-and-rename-a-variable.patch [deleted file]
queue-5.15/perf-metric-only-add-a-referenced-metric-once.patch [deleted file]
queue-5.15/perf-parse-events-add-const-to-evsel-name.patch [deleted file]
queue-5.15/perf-parse-events-add-new-metric-id-term.patch [deleted file]
queue-5.15/perf-parse-events-identify-broken-modifiers.patch [deleted file]
queue-5.15/perf-pmu-fix-alias-events-list.patch [deleted file]
queue-5.15/perf-tools-check-vmlinux-kallsyms-arguments-in-all-t.patch [deleted file]
queue-5.15/perf-tools-enhance-the-matching-of-sub-commands-abbr.patch [deleted file]
queue-5.15/series

diff --git a/queue-5.15/perf-list-display-hybrid-pmu-events-with-cpu-type.patch b/queue-5.15/perf-list-display-hybrid-pmu-events-with-cpu-type.patch
deleted file mode 100644 (file)
index 1a87fea..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-From e927c72e5390396a7ce5aa5ed744d5ccbdef09c3 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 3 Sep 2021 10:52:39 +0800
-Subject: perf list: Display hybrid PMU events with cpu type
-
-From: Jin Yao <yao.jin@linux.intel.com>
-
-[ Upstream commit 0e0ae8742207c3b477cf0357b8115cec7b19612c ]
-
-Add a new option '--cputype' to 'perf list' to display core-only PMU
-events or atom-only PMU events.
-
-Each hybrid PMU event has been assigned with a PMU name, this patch
-compares the PMU name before listing the result.
-
-For example:
-
-  perf list --cputype atom
-  ...
-  cache:
-    core_reject_l2q.any
-         [Counts the number of request that were not accepted into the L2Q because the L2Q is FULL. Unit: cpu_atom]
-  ...
-
-The "Unit: cpu_atom" is displayed in the brief description section
-to indicate this is an atom event.
-
-Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andi Kleen <ak@linux.intel.com>
-Cc: Jin Yao <yao.jin@intel.com>
-Cc: Jiri Olsa <jolsa@kernel.org>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Link: http://lore.kernel.org/lkml/20210903025239.22754-1-yao.jin@linux.intel.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/Documentation/perf-list.txt |  4 +++
- tools/perf/builtin-list.c              | 42 ++++++++++++++++++--------
- tools/perf/util/metricgroup.c          |  7 ++++-
- tools/perf/util/metricgroup.h          |  2 +-
- tools/perf/util/parse-events.c         |  8 +++--
- tools/perf/util/parse-events.h         |  3 +-
- tools/perf/util/pmu.c                  | 29 +++++++++++++++---
- tools/perf/util/pmu.h                  |  2 +-
- 8 files changed, 73 insertions(+), 24 deletions(-)
-
-diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt
-index 4c7db1da8fcc..4dc8d0af19df 100644
---- a/tools/perf/Documentation/perf-list.txt
-+++ b/tools/perf/Documentation/perf-list.txt
-@@ -39,6 +39,10 @@ any extra expressions computed by perf stat.
- --deprecated::
- Print deprecated events. By default the deprecated events are hidden.
-+--cputype::
-+Print events applying cpu with this type for hybrid platform
-+(e.g. --cputype core or --cputype atom)
-+
- [[EVENT_MODIFIERS]]
- EVENT MODIFIERS
- ---------------
-diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c
-index 10ab5e40a34f..468958154ed9 100644
---- a/tools/perf/builtin-list.c
-+++ b/tools/perf/builtin-list.c
-@@ -12,6 +12,7 @@
- #include "util/parse-events.h"
- #include "util/pmu.h"
-+#include "util/pmu-hybrid.h"
- #include "util/debug.h"
- #include "util/metricgroup.h"
- #include <subcmd/pager.h>
-@@ -20,13 +21,15 @@
- static bool desc_flag = true;
- static bool details_flag;
-+static const char *hybrid_type;
- int cmd_list(int argc, const char **argv)
- {
--      int i;
-+      int i, ret = 0;
-       bool raw_dump = false;
-       bool long_desc_flag = false;
-       bool deprecated = false;
-+      char *pmu_name = NULL;
-       struct option list_options[] = {
-               OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw events"),
-               OPT_BOOLEAN('d', "desc", &desc_flag,
-@@ -37,6 +40,9 @@ int cmd_list(int argc, const char **argv)
-                           "Print information on the perf event names and expressions used internally by events."),
-               OPT_BOOLEAN(0, "deprecated", &deprecated,
-                           "Print deprecated events."),
-+              OPT_STRING(0, "cputype", &hybrid_type, "hybrid cpu type",
-+                         "Print events applying cpu with this type for hybrid platform "
-+                         "(e.g. core or atom)"),
-               OPT_INCR(0, "debug", &verbose,
-                            "Enable debugging output"),
-               OPT_END()
-@@ -56,10 +62,16 @@ int cmd_list(int argc, const char **argv)
-       if (!raw_dump && pager_in_use())
-               printf("\nList of pre-defined events (to be used in -e):\n\n");
-+      if (hybrid_type) {
-+              pmu_name = perf_pmu__hybrid_type_to_pmu(hybrid_type);
-+              if (!pmu_name)
-+                      pr_warning("WARNING: hybrid cputype is not supported!\n");
-+      }
-+
-       if (argc == 0) {
-               print_events(NULL, raw_dump, !desc_flag, long_desc_flag,
--                              details_flag, deprecated);
--              return 0;
-+                              details_flag, deprecated, pmu_name);
-+              goto out;
-       }
-       for (i = 0; i < argc; ++i) {
-@@ -82,25 +94,27 @@ int cmd_list(int argc, const char **argv)
-               else if (strcmp(argv[i], "pmu") == 0)
-                       print_pmu_events(NULL, raw_dump, !desc_flag,
-                                               long_desc_flag, details_flag,
--                                              deprecated);
-+                                              deprecated, pmu_name);
-               else if (strcmp(argv[i], "sdt") == 0)
-                       print_sdt_events(NULL, NULL, raw_dump);
-               else if (strcmp(argv[i], "metric") == 0 || strcmp(argv[i], "metrics") == 0)
--                      metricgroup__print(true, false, NULL, raw_dump, details_flag);
-+                      metricgroup__print(true, false, NULL, raw_dump, details_flag, pmu_name);
-               else if (strcmp(argv[i], "metricgroup") == 0 || strcmp(argv[i], "metricgroups") == 0)
--                      metricgroup__print(false, true, NULL, raw_dump, details_flag);
-+                      metricgroup__print(false, true, NULL, raw_dump, details_flag, pmu_name);
-               else if ((sep = strchr(argv[i], ':')) != NULL) {
-                       int sep_idx;
-                       sep_idx = sep - argv[i];
-                       s = strdup(argv[i]);
--                      if (s == NULL)
--                              return -1;
-+                      if (s == NULL) {
-+                              ret = -1;
-+                              goto out;
-+                      }
-                       s[sep_idx] = '\0';
-                       print_tracepoint_events(s, s + sep_idx + 1, raw_dump);
-                       print_sdt_events(s, s + sep_idx + 1, raw_dump);
--                      metricgroup__print(true, true, s, raw_dump, details_flag);
-+                      metricgroup__print(true, true, s, raw_dump, details_flag, pmu_name);
-                       free(s);
-               } else {
-                       if (asprintf(&s, "*%s*", argv[i]) < 0) {
-@@ -116,12 +130,16 @@ int cmd_list(int argc, const char **argv)
-                       print_pmu_events(s, raw_dump, !desc_flag,
-                                               long_desc_flag,
-                                               details_flag,
--                                              deprecated);
-+                                              deprecated,
-+                                              pmu_name);
-                       print_tracepoint_events(NULL, s, raw_dump);
-                       print_sdt_events(NULL, s, raw_dump);
--                      metricgroup__print(true, true, s, raw_dump, details_flag);
-+                      metricgroup__print(true, true, s, raw_dump, details_flag, pmu_name);
-                       free(s);
-               }
-       }
--      return 0;
-+
-+out:
-+      free(pmu_name);
-+      return ret;
- }
-diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
-index ec8195f1ab50..9d172ac66062 100644
---- a/tools/perf/util/metricgroup.c
-+++ b/tools/perf/util/metricgroup.c
-@@ -11,6 +11,7 @@
- #include "evsel.h"
- #include "strbuf.h"
- #include "pmu.h"
-+#include "pmu-hybrid.h"
- #include "expr.h"
- #include "rblist.h"
- #include <string.h>
-@@ -616,7 +617,7 @@ static int metricgroup__print_sys_event_iter(struct pmu_event *pe, void *data)
- }
- void metricgroup__print(bool metrics, bool metricgroups, char *filter,
--                      bool raw, bool details)
-+                      bool raw, bool details, const char *pmu_name)
- {
-       struct pmu_events_map *map = pmu_events_map__find();
-       struct pmu_event *pe;
-@@ -642,6 +643,10 @@ void metricgroup__print(bool metrics, bool metricgroups, char *filter,
-                       break;
-               if (!pe->metric_expr)
-                       continue;
-+              if (pmu_name && perf_pmu__is_hybrid(pe->pmu) &&
-+                  strcmp(pmu_name, pe->pmu)) {
-+                      continue;
-+              }
-               if (metricgroup__print_pmu_event(pe, metricgroups, filter,
-                                                raw, details, &groups,
-                                                metriclist) < 0)
-diff --git a/tools/perf/util/metricgroup.h b/tools/perf/util/metricgroup.h
-index cc4a92492a61..9deee6691f2e 100644
---- a/tools/perf/util/metricgroup.h
-+++ b/tools/perf/util/metricgroup.h
-@@ -53,7 +53,7 @@ int metricgroup__parse_groups_test(struct evlist *evlist,
-                                  struct rblist *metric_events);
- void metricgroup__print(bool metrics, bool groups, char *filter,
--                      bool raw, bool details);
-+                      bool raw, bool details, const char *pmu_name);
- bool metricgroup__has_metric(const char *metric);
- int arch_get_runtimeparam(struct pmu_event *pe __maybe_unused);
- void metricgroup__rblist_exit(struct rblist *metric_events);
-diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
-index e62514577b97..533c4b216ae2 100644
---- a/tools/perf/util/parse-events.c
-+++ b/tools/perf/util/parse-events.c
-@@ -3034,7 +3034,8 @@ void print_symbol_events(const char *event_glob, unsigned type,
-  * Print the help text for the event symbols:
-  */
- void print_events(const char *event_glob, bool name_only, bool quiet_flag,
--                      bool long_desc, bool details_flag, bool deprecated)
-+                      bool long_desc, bool details_flag, bool deprecated,
-+                      const char *pmu_name)
- {
-       print_symbol_events(event_glob, PERF_TYPE_HARDWARE,
-                           event_symbols_hw, PERF_COUNT_HW_MAX, name_only);
-@@ -3046,7 +3047,7 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
-       print_hwcache_events(event_glob, name_only);
-       print_pmu_events(event_glob, name_only, quiet_flag, long_desc,
--                      details_flag, deprecated);
-+                      details_flag, deprecated, pmu_name);
-       if (event_glob != NULL)
-               return;
-@@ -3072,7 +3073,8 @@ void print_events(const char *event_glob, bool name_only, bool quiet_flag,
-       print_sdt_events(NULL, NULL, name_only);
--      metricgroup__print(true, true, NULL, name_only, details_flag);
-+      metricgroup__print(true, true, NULL, name_only, details_flag,
-+                         pmu_name);
-       print_libpfm_events(name_only, long_desc);
- }
-diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
-index 9de27b7c9eec..46e9ec9588ec 100644
---- a/tools/perf/util/parse-events.h
-+++ b/tools/perf/util/parse-events.h
-@@ -221,7 +221,8 @@ void parse_events_evlist_error(struct parse_events_state *parse_state,
-                              int idx, const char *str);
- void print_events(const char *event_glob, bool name_only, bool quiet,
--                bool long_desc, bool details_flag, bool deprecated);
-+                bool long_desc, bool details_flag, bool deprecated,
-+                const char *pmu_name);
- struct event_symbol {
-       const char      *symbol;
-diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
-index c647b3633d1d..79ee52faaf9b 100644
---- a/tools/perf/util/pmu.c
-+++ b/tools/perf/util/pmu.c
-@@ -1608,6 +1608,7 @@ static int cmp_sevent(const void *a, const void *b)
- {
-       const struct sevent *as = a;
-       const struct sevent *bs = b;
-+      int ret;
-       /* Put extra events last */
-       if (!!as->desc != !!bs->desc)
-@@ -1623,7 +1624,13 @@ static int cmp_sevent(const void *a, const void *b)
-       if (as->is_cpu != bs->is_cpu)
-               return bs->is_cpu - as->is_cpu;
--      return strcmp(as->name, bs->name);
-+      ret = strcmp(as->name, bs->name);
-+      if (!ret) {
-+              if (as->pmu && bs->pmu)
-+                      return strcmp(as->pmu, bs->pmu);
-+      }
-+
-+      return ret;
- }
- static void wordwrap(char *s, int start, int max, int corr)
-@@ -1653,7 +1660,8 @@ bool is_pmu_core(const char *name)
- }
- void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
--                      bool long_desc, bool details_flag, bool deprecated)
-+                      bool long_desc, bool details_flag, bool deprecated,
-+                      const char *pmu_name)
- {
-       struct perf_pmu *pmu;
-       struct perf_pmu_alias *alias;
-@@ -1679,10 +1687,16 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
-       pmu = NULL;
-       j = 0;
-       while ((pmu = perf_pmu__scan(pmu)) != NULL) {
-+              if (pmu_name && perf_pmu__is_hybrid(pmu->name) &&
-+                  strcmp(pmu_name, pmu->name)) {
-+                      continue;
-+              }
-+
-               list_for_each_entry(alias, &pmu->aliases, list) {
-                       char *name = alias->desc ? alias->name :
-                               format_alias(buf, sizeof(buf), pmu, alias);
--                      bool is_cpu = is_pmu_core(pmu->name);
-+                      bool is_cpu = is_pmu_core(pmu->name) ||
-+                                    perf_pmu__is_hybrid(pmu->name);
-                       if (alias->deprecated && !deprecated)
-                               continue;
-@@ -1730,8 +1744,13 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
-       qsort(aliases, len, sizeof(struct sevent), cmp_sevent);
-       for (j = 0; j < len; j++) {
-               /* Skip duplicates */
--              if (j > 0 && !strcmp(aliases[j].name, aliases[j - 1].name))
--                      continue;
-+              if (j > 0 && !strcmp(aliases[j].name, aliases[j - 1].name)) {
-+                      if (!aliases[j].pmu || !aliases[j - 1].pmu ||
-+                          !strcmp(aliases[j].pmu, aliases[j - 1].pmu)) {
-+                              continue;
-+                      }
-+              }
-+
-               if (name_only) {
-                       printf("%s ", aliases[j].name);
-                       continue;
-diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
-index dd0736de32c8..57f7b4847fe5 100644
---- a/tools/perf/util/pmu.h
-+++ b/tools/perf/util/pmu.h
-@@ -111,7 +111,7 @@ struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu);
- bool is_pmu_core(const char *name);
- void print_pmu_events(const char *event_glob, bool name_only, bool quiet,
-                     bool long_desc, bool details_flag,
--                    bool deprecated);
-+                    bool deprecated, const char *pmu_name);
- bool pmu_have_event(const char *pname, const char *name);
- int perf_pmu__scan_file(struct perf_pmu *pmu, const char *name, const char *fmt, ...) __scanf(3, 4);
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-metric-add-documentation-and-rename-a-variable.patch b/queue-5.15/perf-metric-add-documentation-and-rename-a-variable.patch
deleted file mode 100644 (file)
index e6d759e..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-From 5089ed4bb34997f7fc6d7536f2d1ea1bf59bcd88 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 15 Oct 2021 10:21:17 -0700
-Subject: perf metric: Add documentation and rename a variable.
-
-From: Ian Rogers <irogers@google.com>
-
-[ Upstream commit 68074811dfb9529bb7cade0e67d42c7f7bf209e6 ]
-
-Documentation to make current functionality clearer.
-
-Rename a variable called 'metric' to 'metric_name' as it can be
-ambiguous as to whether a string is the name of a metric or the
-expression.
-
-Signed-off-by: Ian Rogers <irogers@google.com>
-Acked-by: Andi Kleen <ak@linux.intel.com>
-Cc: Adrian Hunter <adrian.hunter@intel.com>
-Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andrew Kilroy <andrew.kilroy@arm.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: Changbin Du <changbin.du@intel.com>
-Cc: Denys Zagorui <dzagorui@cisco.com>
-Cc: Fabian Hemmer <copy@copy.sh>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Heiko Carstens <hca@linux.ibm.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jacob Keller <jacob.e.keller@intel.com>
-Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
-Cc: Jin Yao <yao.jin@linux.intel.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
-Cc: John Garry <john.garry@huawei.com>
-Cc: Kajol Jain <kjain@linux.ibm.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Kees Kook <keescook@chromium.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Nicholas Fraser <nfraser@codeweavers.com>
-Cc: Nick Desaulniers <ndesaulniers@google.com>
-Cc: Paul Clarke <pc@us.ibm.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Riccardo Mancini <rickyman7@gmail.com>
-Cc: Sami Tolvanen <samitolvanen@google.com>
-Cc: ShihCheng Tu <mrtoastcheng@gmail.com>
-Cc: Song Liu <songliubraving@fb.com>
-Cc: Stephane Eranian <eranian@google.com>
-Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
-Cc: Thomas Richter <tmricht@linux.ibm.com>
-Cc: Wan Jiabing <wanjiabing@vivo.com>
-Cc: Zhen Lei <thunder.leizhen@huawei.com>
-Link: https://lore.kernel.org/r/20211015172132.1162559-7-irogers@google.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/util/metricgroup.c | 59 ++++++++++++++++++++++++++++++++---
- 1 file changed, 54 insertions(+), 5 deletions(-)
-
-diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
-index 29b747ac31c1..2dc2a0dcf846 100644
---- a/tools/perf/util/metricgroup.c
-+++ b/tools/perf/util/metricgroup.c
-@@ -772,13 +772,27 @@ int __weak arch_get_runtimeparam(struct pmu_event *pe __maybe_unused)
- struct metricgroup_add_iter_data {
-       struct list_head *metric_list;
--      const char *metric;
-+      const char *metric_name;
-       struct expr_ids *ids;
-       int *ret;
-       bool *has_match;
-       bool metric_no_group;
- };
-+/**
-+ * __add_metric - Add a metric to metric_list.
-+ * @metric_list: The list the metric is added to.
-+ * @pe: The pmu_event containing the metric to be added.
-+ * @metric_no_group: Should events written to events be grouped "{}" or
-+ *                   global. Grouping is the default but due to multiplexing the
-+ *                   user may override.
-+ * @runtime: A special argument for the parser only known at runtime.
-+ * @mp: The pointer to a location holding the first metric added to metric
-+ *      list. It is initialized here if this is the first metric.
-+ * @parent: The last entry in a linked list of metrics being
-+ *          added/resolved. This is maintained to detect recursion.
-+ * @ids: Storage for parent list.
-+ */
- static int __add_metric(struct list_head *metric_list,
-                       struct pmu_event *pe,
-                       bool metric_no_group,
-@@ -1068,7 +1082,7 @@ static int metricgroup__add_metric_sys_event_iter(struct pmu_event *pe,
-       struct metric *m = NULL;
-       int ret;
--      if (!match_pe_metric(pe, d->metric))
-+      if (!match_pe_metric(pe, d->metric_name))
-               return 0;
-       ret = add_metric(d->metric_list, pe, d->metric_no_group, &m, NULL, d->ids);
-@@ -1087,7 +1101,22 @@ static int metricgroup__add_metric_sys_event_iter(struct pmu_event *pe,
-       return ret;
- }
--static int metricgroup__add_metric(const char *metric, bool metric_no_group,
-+/**
-+ * metricgroup__add_metric - Find and add a metric, or a metric group.
-+ * @metric_name: The name of the metric or metric group. For example, "IPC"
-+ *               could be the name of a metric and "TopDownL1" the name of a
-+ *               metric group.
-+ * @metric_no_group: Should events written to events be grouped "{}" or
-+ *                   global. Grouping is the default but due to multiplexing the
-+ *                   user may override.
-+ * @events: an out argument string of events that need to be parsed and
-+ *          associated with the metric. For example, the metric "IPC" would
-+ *          create an events string like "{instructions,cycles}:W".
-+ * @metric_list: The list that the metric or metric group are added to.
-+ * @map: The map that is searched for metrics, most commonly the table for the
-+ *       architecture perf is running upon.
-+ */
-+static int metricgroup__add_metric(const char *metric_name, bool metric_no_group,
-                                  struct strbuf *events,
-                                  struct list_head *metric_list,
-                                  struct pmu_events_map *map)
-@@ -1099,7 +1128,11 @@ static int metricgroup__add_metric(const char *metric, bool metric_no_group,
-       int i, ret;
-       bool has_match = false;
--      map_for_each_metric(pe, i, map, metric) {
-+      /*
-+       * Iterate over all metrics seeing if metric matches either the name or
-+       * group. When it does add the metric to the list.
-+       */
-+      map_for_each_metric(pe, i, map, metric_name) {
-               has_match = true;
-               m = NULL;
-@@ -1122,7 +1155,7 @@ static int metricgroup__add_metric(const char *metric, bool metric_no_group,
-                       .fn = metricgroup__add_metric_sys_event_iter,
-                       .data = (void *) &(struct metricgroup_add_iter_data) {
-                               .metric_list = &list,
--                              .metric = metric,
-+                              .metric_name = metric_name,
-                               .metric_no_group = metric_no_group,
-                               .ids = &ids,
-                               .has_match = &has_match,
-@@ -1161,6 +1194,22 @@ static int metricgroup__add_metric(const char *metric, bool metric_no_group,
-       return ret;
- }
-+/**
-+ * metricgroup__add_metric_list - Find and add metrics, or metric groups,
-+ *                                specified in a list.
-+ * @list: the list of metrics or metric groups. For example, "IPC,CPI,TopDownL1"
-+ *        would match the IPC and CPI metrics, and TopDownL1 would match all
-+ *        the metrics in the TopDownL1 group.
-+ * @metric_no_group: Should events written to events be grouped "{}" or
-+ *                   global. Grouping is the default but due to multiplexing the
-+ *                   user may override.
-+ * @events: an out argument string of events that need to be parsed and
-+ *          associated with the metric. For example, the metric "IPC" would
-+ *          create an events string like "{instructions,cycles}:W".
-+ * @metric_list: The list that metrics are added to.
-+ * @map: The map that is searched for metrics, most commonly the table for the
-+ *       architecture perf is running upon.
-+ */
- static int metricgroup__add_metric_list(const char *list, bool metric_no_group,
-                                       struct strbuf *events,
-                                       struct list_head *metric_list,
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-metric-only-add-a-referenced-metric-once.patch b/queue-5.15/perf-metric-only-add-a-referenced-metric-once.patch
deleted file mode 100644 (file)
index 0395cac..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-From aef9d246aa30dffd392308024c92bde60b7aa63a Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 15 Oct 2021 10:21:19 -0700
-Subject: perf metric: Only add a referenced metric once
-
-From: Ian Rogers <irogers@google.com>
-
-[ Upstream commit a3de76903dd0786a8661e9e6eb9054a7519e10e7 ]
-
-If a metric references other metrics then the same other metrics may be
-referenced more than once, but the events and metric ref are only needed
-once.
-
-An example of this is in tests/parse-metric.c where DCache_L2_Hits
-references the metric DCache_L2_All_Hits twice, once directly and once
-through DCache_L2_All.
-
-Signed-off-by: Ian Rogers <irogers@google.com>
-Acked-by: Andi Kleen <ak@linux.intel.com>
-Cc: Adrian Hunter <adrian.hunter@intel.com>
-Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andrew Kilroy <andrew.kilroy@arm.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: Changbin Du <changbin.du@intel.com>
-Cc: Denys Zagorui <dzagorui@cisco.com>
-Cc: Fabian Hemmer <copy@copy.sh>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Heiko Carstens <hca@linux.ibm.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jacob Keller <jacob.e.keller@intel.com>
-Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
-Cc: Jin Yao <yao.jin@linux.intel.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
-Cc: John Garry <john.garry@huawei.com>
-Cc: Kajol Jain <kjain@linux.ibm.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Kees Kook <keescook@chromium.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Nicholas Fraser <nfraser@codeweavers.com>
-Cc: Nick Desaulniers <ndesaulniers@google.com>
-Cc: Paul Clarke <pc@us.ibm.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Riccardo Mancini <rickyman7@gmail.com>
-Cc: Sami Tolvanen <samitolvanen@google.com>
-Cc: ShihCheng Tu <mrtoastcheng@gmail.com>
-Cc: Song Liu <songliubraving@fb.com>
-Cc: Stephane Eranian <eranian@google.com>
-Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
-Cc: Thomas Richter <tmricht@linux.ibm.com>
-Cc: Wan Jiabing <wanjiabing@vivo.com>
-Cc: Zhen Lei <thunder.leizhen@huawei.com>
-Link: https://lore.kernel.org/r/20211015172132.1162559-9-irogers@google.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/util/metricgroup.c | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
-index 2dc2a0dcf846..ec8195f1ab50 100644
---- a/tools/perf/util/metricgroup.c
-+++ b/tools/perf/util/metricgroup.c
-@@ -836,12 +836,18 @@ static int __add_metric(struct list_head *metric_list,
-               *mp = m;
-       } else {
-               /*
--               * We got here for the referenced metric, via the
--               * recursive metricgroup__add_metric call, add
--               * it to the parent group.
-+               * This metric was referenced in a metric higher in the
-+               * tree. Check if the same metric is already resolved in the
-+               * metric_refs list.
-                */
-               m = *mp;
-+              list_for_each_entry(ref, &m->metric_refs, list) {
-+                      if (!strcmp(pe->metric_name, ref->metric_name))
-+                              return 0;
-+              }
-+
-+              /*Add the new referenced metric to the pare the parent group. */
-               ref = malloc(sizeof(*ref));
-               if (!ref)
-                       return -ENOMEM;
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-parse-events-add-const-to-evsel-name.patch b/queue-5.15/perf-parse-events-add-const-to-evsel-name.patch
deleted file mode 100644 (file)
index 622fe75..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-From 670bef849880696397b2bdc3fc485f1746e40449 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 15 Oct 2021 10:21:24 -0700
-Subject: perf parse-events: Add const to evsel name
-
-From: Ian Rogers <irogers@google.com>
-
-[ Upstream commit 8e8bbfb311a26a17834f1839e15e2c29ea5e58c6 ]
-
-The evsel name is strdup-ed before assignment and so can be const.
-
-A later change will add another similar string.
-
-Using const makes it clearer that these are not out arguments.
-
-Signed-off-by: Ian Rogers <irogers@google.com>
-Acked-by: Andi Kleen <ak@linux.intel.com>
-Cc: Adrian Hunter <adrian.hunter@intel.com>
-Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andrew Kilroy <andrew.kilroy@arm.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: Changbin Du <changbin.du@intel.com>
-Cc: Denys Zagorui <dzagorui@cisco.com>
-Cc: Fabian Hemmer <copy@copy.sh>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Heiko Carstens <hca@linux.ibm.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jacob Keller <jacob.e.keller@intel.com>
-Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
-Cc: Jin Yao <yao.jin@linux.intel.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
-Cc: John Garry <john.garry@huawei.com>
-Cc: Kajol Jain <kjain@linux.ibm.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Kees Kook <keescook@chromium.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Nicholas Fraser <nfraser@codeweavers.com>
-Cc: Nick Desaulniers <ndesaulniers@google.com>
-Cc: Paul Clarke <pc@us.ibm.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Riccardo Mancini <rickyman7@gmail.com>
-Cc: Sami Tolvanen <samitolvanen@google.com>
-Cc: ShihCheng Tu <mrtoastcheng@gmail.com>
-Cc: Song Liu <songliubraving@fb.com>
-Cc: Stephane Eranian <eranian@google.com>
-Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
-Cc: Thomas Richter <tmricht@linux.ibm.com>
-Cc: Wan Jiabing <wanjiabing@vivo.com>
-Cc: Zhen Lei <thunder.leizhen@huawei.com>
-Link: https://lore.kernel.org/r/20211015172132.1162559-14-irogers@google.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/util/parse-events-hybrid.c | 15 +++++++++------
- tools/perf/util/parse-events-hybrid.h |  6 ++++--
- tools/perf/util/parse-events.c        | 15 ++++++++-------
- tools/perf/util/parse-events.h        |  7 ++++---
- tools/perf/util/pmu.c                 |  2 +-
- tools/perf/util/pmu.h                 |  2 +-
- 6 files changed, 27 insertions(+), 20 deletions(-)
-
-diff --git a/tools/perf/util/parse-events-hybrid.c b/tools/perf/util/parse-events-hybrid.c
-index b234d95fb10a..7e44deee1343 100644
---- a/tools/perf/util/parse-events-hybrid.c
-+++ b/tools/perf/util/parse-events-hybrid.c
-@@ -38,7 +38,7 @@ static void config_hybrid_attr(struct perf_event_attr *attr,
- static int create_event_hybrid(__u32 config_type, int *idx,
-                              struct list_head *list,
--                             struct perf_event_attr *attr, char *name,
-+                             struct perf_event_attr *attr, const char *name,
-                              struct list_head *config_terms,
-                              struct perf_pmu *pmu)
- {
-@@ -70,7 +70,7 @@ static int pmu_cmp(struct parse_events_state *parse_state,
- static int add_hw_hybrid(struct parse_events_state *parse_state,
-                        struct list_head *list, struct perf_event_attr *attr,
--                       char *name, struct list_head *config_terms)
-+                       const char *name, struct list_head *config_terms)
- {
-       struct perf_pmu *pmu;
-       int ret;
-@@ -94,7 +94,8 @@ static int add_hw_hybrid(struct parse_events_state *parse_state,
- }
- static int create_raw_event_hybrid(int *idx, struct list_head *list,
--                                 struct perf_event_attr *attr, char *name,
-+                                 struct perf_event_attr *attr,
-+                                 const char *name,
-                                  struct list_head *config_terms,
-                                  struct perf_pmu *pmu)
- {
-@@ -113,7 +114,7 @@ static int create_raw_event_hybrid(int *idx, struct list_head *list,
- static int add_raw_hybrid(struct parse_events_state *parse_state,
-                         struct list_head *list, struct perf_event_attr *attr,
--                        char *name, struct list_head *config_terms)
-+                        const char *name, struct list_head *config_terms)
- {
-       struct perf_pmu *pmu;
-       int ret;
-@@ -138,7 +139,8 @@ static int add_raw_hybrid(struct parse_events_state *parse_state,
- int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
-                                    struct list_head *list,
-                                    struct perf_event_attr *attr,
--                                   char *name, struct list_head *config_terms,
-+                                   const char *name,
-+                                   struct list_head *config_terms,
-                                    bool *hybrid)
- {
-       *hybrid = false;
-@@ -159,7 +161,8 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
- }
- int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
--                                 struct perf_event_attr *attr, char *name,
-+                                 struct perf_event_attr *attr,
-+                                 const char *name,
-                                  struct list_head *config_terms,
-                                  bool *hybrid,
-                                  struct parse_events_state *parse_state)
-diff --git a/tools/perf/util/parse-events-hybrid.h b/tools/perf/util/parse-events-hybrid.h
-index f33bd67aa851..25a4a4f73f3a 100644
---- a/tools/perf/util/parse-events-hybrid.h
-+++ b/tools/perf/util/parse-events-hybrid.h
-@@ -11,11 +11,13 @@
- int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
-                                    struct list_head *list,
-                                    struct perf_event_attr *attr,
--                                   char *name, struct list_head *config_terms,
-+                                   const char *name,
-+                                   struct list_head *config_terms,
-                                    bool *hybrid);
- int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
--                                 struct perf_event_attr *attr, char *name,
-+                                 struct perf_event_attr *attr,
-+                                 const char *name,
-                                  struct list_head *config_terms,
-                                  bool *hybrid,
-                                  struct parse_events_state *parse_state);
-diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
-index b93a36ffeb9e..aaeebf0752b7 100644
---- a/tools/perf/util/parse-events.c
-+++ b/tools/perf/util/parse-events.c
-@@ -347,7 +347,7 @@ static int parse_events__is_name_term(struct parse_events_term *term)
-       return term->type_term == PARSE_EVENTS__TERM_TYPE_NAME;
- }
--static char *get_config_name(struct list_head *head_terms)
-+static const char *get_config_name(struct list_head *head_terms)
- {
-       struct parse_events_term *term;
-@@ -365,7 +365,7 @@ static struct evsel *
- __add_event(struct list_head *list, int *idx,
-           struct perf_event_attr *attr,
-           bool init_attr,
--          char *name, struct perf_pmu *pmu,
-+          const char *name, struct perf_pmu *pmu,
-           struct list_head *config_terms, bool auto_merge_stats,
-           const char *cpu_list)
- {
-@@ -404,14 +404,14 @@ __add_event(struct list_head *list, int *idx,
- }
- struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
--                                      char *name, struct perf_pmu *pmu)
-+                                    const char *name, struct perf_pmu *pmu)
- {
-       return __add_event(NULL, &idx, attr, false, name, pmu, NULL, false,
-                          NULL);
- }
- static int add_event(struct list_head *list, int *idx,
--                   struct perf_event_attr *attr, char *name,
-+                   struct perf_event_attr *attr, const char *name,
-                    struct list_head *config_terms)
- {
-       return __add_event(list, idx, attr, true, name, NULL, config_terms,
-@@ -474,7 +474,8 @@ int parse_events_add_cache(struct list_head *list, int *idx,
- {
-       struct perf_event_attr attr;
-       LIST_HEAD(config_terms);
--      char name[MAX_NAME_LEN], *config_name;
-+      char name[MAX_NAME_LEN];
-+      const char *config_name;
-       int cache_type = -1, cache_op = -1, cache_result = -1;
-       char *op_result[2] = { op_result1, op_result2 };
-       int i, n, ret;
-@@ -2038,7 +2039,7 @@ int parse_events__modifier_event(struct list_head *list, char *str, bool add)
-       return 0;
- }
--int parse_events_name(struct list_head *list, char *name)
-+int parse_events_name(struct list_head *list, const char *name)
- {
-       struct evsel *evsel;
-@@ -3295,7 +3296,7 @@ char *parse_events_formats_error_string(char *additional_terms)
- struct evsel *parse_events__add_event_hybrid(struct list_head *list, int *idx,
-                                            struct perf_event_attr *attr,
--                                           char *name, struct perf_pmu *pmu,
-+                                           const char *name, struct perf_pmu *pmu,
-                                            struct list_head *config_terms)
- {
-       return __add_event(list, idx, attr, true, name, pmu,
-diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
-index bf6e41aa9b6a..6ef506c1b29e 100644
---- a/tools/perf/util/parse-events.h
-+++ b/tools/perf/util/parse-events.h
-@@ -162,7 +162,7 @@ void parse_events_terms__purge(struct list_head *terms);
- void parse_events__clear_array(struct parse_events_array *a);
- int parse_events__modifier_event(struct list_head *list, char *str, bool add);
- int parse_events__modifier_group(struct list_head *list, char *event_mod);
--int parse_events_name(struct list_head *list, char *name);
-+int parse_events_name(struct list_head *list, const char *name);
- int parse_events_add_tracepoint(struct list_head *list, int *idx,
-                               const char *sys, const char *event,
-                               struct parse_events_error *error,
-@@ -200,7 +200,7 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
-                        bool use_alias);
- struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
--                                      char *name, struct perf_pmu *pmu);
-+                                    const char *name, struct perf_pmu *pmu);
- int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
-                              char *str,
-@@ -267,7 +267,8 @@ int perf_pmu__test_parse_init(void);
- struct evsel *parse_events__add_event_hybrid(struct list_head *list, int *idx,
-                                            struct perf_event_attr *attr,
--                                           char *name, struct perf_pmu *pmu,
-+                                           const char *name,
-+                                           struct perf_pmu *pmu,
-                                            struct list_head *config_terms);
- #endif /* __PERF_PARSE_EVENTS_H */
-diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
-index bdabd62170d2..c647b3633d1d 100644
---- a/tools/perf/util/pmu.c
-+++ b/tools/perf/util/pmu.c
-@@ -1906,7 +1906,7 @@ int perf_pmu__caps_parse(struct perf_pmu *pmu)
- }
- void perf_pmu__warn_invalid_config(struct perf_pmu *pmu, __u64 config,
--                                 char *name)
-+                                 const char *name)
- {
-       struct perf_pmu_format *format;
-       __u64 masks = 0, bits;
-diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h
-index 394898b07fd9..dd0736de32c8 100644
---- a/tools/perf/util/pmu.h
-+++ b/tools/perf/util/pmu.h
-@@ -134,7 +134,7 @@ int perf_pmu__convert_scale(const char *scale, char **end, double *sval);
- int perf_pmu__caps_parse(struct perf_pmu *pmu);
- void perf_pmu__warn_invalid_config(struct perf_pmu *pmu, __u64 config,
--                                 char *name);
-+                                 const char *name);
- bool perf_pmu__has_hybrid(void);
- int perf_pmu__match(char *pattern, char *name, char *tok);
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-parse-events-add-new-metric-id-term.patch b/queue-5.15/perf-parse-events-add-new-metric-id-term.patch
deleted file mode 100644 (file)
index 8db8bbd..0000000
+++ /dev/null
@@ -1,597 +0,0 @@
-From 082651a7812b0dba20aaea970ebd529b78f6202d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 15 Oct 2021 10:21:25 -0700
-Subject: perf parse-events: Add new "metric-id" term
-
-From: Ian Rogers <irogers@google.com>
-
-[ Upstream commit 2b62b3a611715d3ca612e3225cf436277ed9648b ]
-
-Add a new "metric-id" term to events so that metric parsing can set an
-ID that can be reliably looked up.
-
-Metric parsing currently will turn a metric like "instructions/cycles"
-into a parse events string of "{instructions,cycles}:W".
-
-However, parse-events may change "instructions" into "instructions:u" if
-perf_event_paranoid=2.
-
-When this happens expr__resolve_id currently fails as stat-shadow adds
-the ID "instructions:u" to match with the counter value and the metric
-tries to look up the ID just "instructions".
-
-A later patch will use the new term.
-
-An example of the current problem:
-
-  $ echo -1 > /proc/sys/kernel/perf_event_paranoid
-  $ perf stat -M IPC /bin/true
-   Performance counter stats for '/bin/true':
-
-           1,217,161      inst_retired.any          #     0.97 IPC
-           1,250,389      cpu_clk_unhalted.thread
-
-         0.002064773 seconds time elapsed
-
-         0.002378000 seconds user
-         0.000000000 seconds sys
-
-  $ echo 2 > /proc/sys/kernel/perf_event_paranoid
-  $ perf stat -M IPC /bin/true
-   Performance counter stats for '/bin/true':
-
-             150,298      inst_retired.any:u        #      nan IPC
-             187,095      cpu_clk_unhalted.thread:u
-
-         0.002042731 seconds time elapsed
-
-         0.000000000 seconds user
-         0.002377000 seconds sys
-
-Note: nan IPC is printed as an effect of "perf metric: Use NAN for
-missing event IDs." but earlier versions of perf just fail with a parse
-error and display no value.
-
-Signed-off-by: Ian Rogers <irogers@google.com>
-Acked-by: Andi Kleen <ak@linux.intel.com>
-Cc: Adrian Hunter <adrian.hunter@intel.com>
-Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andrew Kilroy <andrew.kilroy@arm.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: Changbin Du <changbin.du@intel.com>
-Cc: Denys Zagorui <dzagorui@cisco.com>
-Cc: Fabian Hemmer <copy@copy.sh>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Heiko Carstens <hca@linux.ibm.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jacob Keller <jacob.e.keller@intel.com>
-Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
-Cc: Jin Yao <yao.jin@linux.intel.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
-Cc: John Garry <john.garry@huawei.com>
-Cc: Kajol Jain <kjain@linux.ibm.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Kees Kook <keescook@chromium.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Nicholas Fraser <nfraser@codeweavers.com>
-Cc: Nick Desaulniers <ndesaulniers@google.com>
-Cc: Paul Clarke <pc@us.ibm.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Riccardo Mancini <rickyman7@gmail.com>
-Cc: Sami Tolvanen <samitolvanen@google.com>
-Cc: ShihCheng Tu <mrtoastcheng@gmail.com>
-Cc: Song Liu <songliubraving@fb.com>
-Cc: Stephane Eranian <eranian@google.com>
-Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
-Cc: Thomas Richter <tmricht@linux.ibm.com>
-Cc: Wan Jiabing <wanjiabing@vivo.com>
-Cc: Zhen Lei <thunder.leizhen@huawei.com>
-Link: https://lore.kernel.org/r/20211015172132.1162559-15-irogers@google.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/util/evsel.c               | 17 +++++
- tools/perf/util/evsel.h               |  2 +
- tools/perf/util/parse-events-hybrid.c | 25 ++++---
- tools/perf/util/parse-events-hybrid.h |  4 +-
- tools/perf/util/parse-events.c        | 95 ++++++++++++++++++---------
- tools/perf/util/parse-events.h        |  5 +-
- tools/perf/util/parse-events.l        |  1 +
- tools/perf/util/pfm.c                 |  3 +-
- 8 files changed, 107 insertions(+), 45 deletions(-)
-
-diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
-index c87f9974c0c1..1e43fac90fc8 100644
---- a/tools/perf/util/evsel.c
-+++ b/tools/perf/util/evsel.c
-@@ -410,6 +410,11 @@ struct evsel *evsel__clone(struct evsel *orig)
-               if (evsel->filter == NULL)
-                       goto out_err;
-       }
-+      if (orig->metric_id) {
-+              evsel->metric_id = strdup(orig->metric_id);
-+              if (evsel->metric_id == NULL)
-+                      goto out_err;
-+      }
-       evsel->cgrp = cgroup__get(orig->cgrp);
-       evsel->tp_format = orig->tp_format;
-       evsel->handler = orig->handler;
-@@ -779,6 +784,17 @@ const char *evsel__name(struct evsel *evsel)
-       return "unknown";
- }
-+const char *evsel__metric_id(const struct evsel *evsel)
-+{
-+      if (evsel->metric_id)
-+              return evsel->metric_id;
-+
-+      if (evsel->core.attr.type == PERF_TYPE_SOFTWARE && evsel->tool_event)
-+              return "duration_time";
-+
-+      return "unknown";
-+}
-+
- const char *evsel__group_name(struct evsel *evsel)
- {
-       return evsel->group_name ?: "anon group";
-@@ -1432,6 +1448,7 @@ void evsel__exit(struct evsel *evsel)
-       zfree(&evsel->group_name);
-       zfree(&evsel->name);
-       zfree(&evsel->pmu_name);
-+      zfree(&evsel->metric_id);
-       evsel__zero_per_pkg(evsel);
-       hashmap__free(evsel->per_pkg_mask);
-       evsel->per_pkg_mask = NULL;
-diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
-index 1f7edfa8568a..45476a888942 100644
---- a/tools/perf/util/evsel.h
-+++ b/tools/perf/util/evsel.h
-@@ -68,6 +68,7 @@ struct evsel {
-               double                  scale;
-               const char              *unit;
-               struct cgroup           *cgrp;
-+              const char              *metric_id;
-               enum perf_tool_event    tool_event;
-               /* parse modifier helper */
-               int                     exclude_GH;
-@@ -261,6 +262,7 @@ bool evsel__match_bpf_counter_events(const char *name);
- int __evsel__hw_cache_type_op_res_name(u8 type, u8 op, u8 result, char *bf, size_t size);
- const char *evsel__name(struct evsel *evsel);
-+const char *evsel__metric_id(const struct evsel *evsel);
- const char *evsel__group_name(struct evsel *evsel);
- int evsel__group_desc(struct evsel *evsel, char *buf, size_t size);
-diff --git a/tools/perf/util/parse-events-hybrid.c b/tools/perf/util/parse-events-hybrid.c
-index 7e44deee1343..9fc86971027b 100644
---- a/tools/perf/util/parse-events-hybrid.c
-+++ b/tools/perf/util/parse-events-hybrid.c
-@@ -39,6 +39,7 @@ static void config_hybrid_attr(struct perf_event_attr *attr,
- static int create_event_hybrid(__u32 config_type, int *idx,
-                              struct list_head *list,
-                              struct perf_event_attr *attr, const char *name,
-+                             const char *metric_id,
-                              struct list_head *config_terms,
-                              struct perf_pmu *pmu)
- {
-@@ -47,7 +48,7 @@ static int create_event_hybrid(__u32 config_type, int *idx,
-       __u64 config = attr->config;
-       config_hybrid_attr(attr, config_type, pmu->type);
--      evsel = parse_events__add_event_hybrid(list, idx, attr, name,
-+      evsel = parse_events__add_event_hybrid(list, idx, attr, name, metric_id,
-                                              pmu, config_terms);
-       if (evsel)
-               evsel->pmu_name = strdup(pmu->name);
-@@ -70,7 +71,8 @@ static int pmu_cmp(struct parse_events_state *parse_state,
- static int add_hw_hybrid(struct parse_events_state *parse_state,
-                        struct list_head *list, struct perf_event_attr *attr,
--                       const char *name, struct list_head *config_terms)
-+                       const char *name, const char *metric_id,
-+                       struct list_head *config_terms)
- {
-       struct perf_pmu *pmu;
-       int ret;
-@@ -84,7 +86,7 @@ static int add_hw_hybrid(struct parse_events_state *parse_state,
-               copy_config_terms(&terms, config_terms);
-               ret = create_event_hybrid(PERF_TYPE_HARDWARE,
-                                         &parse_state->idx, list, attr, name,
--                                        &terms, pmu);
-+                                        metric_id, &terms, pmu);
-               free_config_terms(&terms);
-               if (ret)
-                       return ret;
-@@ -96,13 +98,14 @@ static int add_hw_hybrid(struct parse_events_state *parse_state,
- static int create_raw_event_hybrid(int *idx, struct list_head *list,
-                                  struct perf_event_attr *attr,
-                                  const char *name,
-+                                 const char *metric_id,
-                                  struct list_head *config_terms,
-                                  struct perf_pmu *pmu)
- {
-       struct evsel *evsel;
-       attr->type = pmu->type;
--      evsel = parse_events__add_event_hybrid(list, idx, attr, name,
-+      evsel = parse_events__add_event_hybrid(list, idx, attr, name, metric_id,
-                                              pmu, config_terms);
-       if (evsel)
-               evsel->pmu_name = strdup(pmu->name);
-@@ -114,7 +117,8 @@ static int create_raw_event_hybrid(int *idx, struct list_head *list,
- static int add_raw_hybrid(struct parse_events_state *parse_state,
-                         struct list_head *list, struct perf_event_attr *attr,
--                        const char *name, struct list_head *config_terms)
-+                        const char *name, const char *metric_id,
-+                        struct list_head *config_terms)
- {
-       struct perf_pmu *pmu;
-       int ret;
-@@ -127,7 +131,7 @@ static int add_raw_hybrid(struct parse_events_state *parse_state,
-               copy_config_terms(&terms, config_terms);
-               ret = create_raw_event_hybrid(&parse_state->idx, list, attr,
--                                            name, &terms, pmu);
-+                                            name, metric_id, &terms, pmu);
-               free_config_terms(&terms);
-               if (ret)
-                       return ret;
-@@ -139,7 +143,7 @@ static int add_raw_hybrid(struct parse_events_state *parse_state,
- int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
-                                    struct list_head *list,
-                                    struct perf_event_attr *attr,
--                                   const char *name,
-+                                   const char *name, const char *metric_id,
-                                    struct list_head *config_terms,
-                                    bool *hybrid)
- {
-@@ -152,17 +156,18 @@ int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
-       *hybrid = true;
-       if (attr->type != PERF_TYPE_RAW) {
--              return add_hw_hybrid(parse_state, list, attr, name,
-+              return add_hw_hybrid(parse_state, list, attr, name, metric_id,
-                                    config_terms);
-       }
--      return add_raw_hybrid(parse_state, list, attr, name,
-+      return add_raw_hybrid(parse_state, list, attr, name, metric_id,
-                             config_terms);
- }
- int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
-                                  struct perf_event_attr *attr,
-                                  const char *name,
-+                                 const char *metric_id,
-                                  struct list_head *config_terms,
-                                  bool *hybrid,
-                                  struct parse_events_state *parse_state)
-@@ -183,7 +188,7 @@ int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
-               copy_config_terms(&terms, config_terms);
-               ret = create_event_hybrid(PERF_TYPE_HW_CACHE, idx, list,
--                                        attr, name, &terms, pmu);
-+                                        attr, name, metric_id, &terms, pmu);
-               free_config_terms(&terms);
-               if (ret)
-                       return ret;
-diff --git a/tools/perf/util/parse-events-hybrid.h b/tools/perf/util/parse-events-hybrid.h
-index 25a4a4f73f3a..cbc05fec02a2 100644
---- a/tools/perf/util/parse-events-hybrid.h
-+++ b/tools/perf/util/parse-events-hybrid.h
-@@ -11,13 +11,13 @@
- int parse_events__add_numeric_hybrid(struct parse_events_state *parse_state,
-                                    struct list_head *list,
-                                    struct perf_event_attr *attr,
--                                   const char *name,
-+                                   const char *name, const char *metric_id,
-                                    struct list_head *config_terms,
-                                    bool *hybrid);
- int parse_events__add_cache_hybrid(struct list_head *list, int *idx,
-                                  struct perf_event_attr *attr,
--                                 const char *name,
-+                                 const char *name, const char *metric_id,
-                                  struct list_head *config_terms,
-                                  bool *hybrid,
-                                  struct parse_events_state *parse_state);
-diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
-index aaeebf0752b7..e62514577b97 100644
---- a/tools/perf/util/parse-events.c
-+++ b/tools/perf/util/parse-events.c
-@@ -342,12 +342,7 @@ const char *event_type(int type)
-       return "unknown";
- }
--static int parse_events__is_name_term(struct parse_events_term *term)
--{
--      return term->type_term == PARSE_EVENTS__TERM_TYPE_NAME;
--}
--
--static const char *get_config_name(struct list_head *head_terms)
-+static char *get_config_str(struct list_head *head_terms, int type_term)
- {
-       struct parse_events_term *term;
-@@ -355,17 +350,27 @@ static const char *get_config_name(struct list_head *head_terms)
-               return NULL;
-       list_for_each_entry(term, head_terms, list)
--              if (parse_events__is_name_term(term))
-+              if (term->type_term == type_term)
-                       return term->val.str;
-       return NULL;
- }
-+static char *get_config_metric_id(struct list_head *head_terms)
-+{
-+      return get_config_str(head_terms, PARSE_EVENTS__TERM_TYPE_METRIC_ID);
-+}
-+
-+static char *get_config_name(struct list_head *head_terms)
-+{
-+      return get_config_str(head_terms, PARSE_EVENTS__TERM_TYPE_NAME);
-+}
-+
- static struct evsel *
- __add_event(struct list_head *list, int *idx,
-           struct perf_event_attr *attr,
-           bool init_attr,
--          const char *name, struct perf_pmu *pmu,
-+          const char *name, const char *metric_id, struct perf_pmu *pmu,
-           struct list_head *config_terms, bool auto_merge_stats,
-           const char *cpu_list)
- {
-@@ -394,6 +399,9 @@ __add_event(struct list_head *list, int *idx,
-       if (name)
-               evsel->name = strdup(name);
-+      if (metric_id)
-+              evsel->metric_id = strdup(metric_id);
-+
-       if (config_terms)
-               list_splice_init(config_terms, &evsel->config_terms);
-@@ -404,18 +412,21 @@ __add_event(struct list_head *list, int *idx,
- }
- struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
--                                    const char *name, struct perf_pmu *pmu)
-+                                    const char *name, const char *metric_id,
-+                                    struct perf_pmu *pmu)
- {
--      return __add_event(NULL, &idx, attr, false, name, pmu, NULL, false,
--                         NULL);
-+      return __add_event(/*list=*/NULL, &idx, attr, /*init_attr=*/false, name,
-+                         metric_id, pmu, /*config_terms=*/NULL,
-+                         /*auto_merge_stats=*/false, /*cpu_list=*/NULL);
- }
- static int add_event(struct list_head *list, int *idx,
-                    struct perf_event_attr *attr, const char *name,
--                   struct list_head *config_terms)
-+                   const char *metric_id, struct list_head *config_terms)
- {
--      return __add_event(list, idx, attr, true, name, NULL, config_terms,
--                         false, NULL) ? 0 : -ENOMEM;
-+      return __add_event(list, idx, attr, /*init_attr*/true, name, metric_id,
-+                         /*pmu=*/NULL, config_terms,
-+                         /*auto_merge_stats=*/false, /*cpu_list=*/NULL) ? 0 : -ENOMEM;
- }
- static int add_event_tool(struct list_head *list, int *idx,
-@@ -427,8 +438,10 @@ static int add_event_tool(struct list_head *list, int *idx,
-               .config = PERF_COUNT_SW_DUMMY,
-       };
--      evsel = __add_event(list, idx, &attr, true, NULL, NULL, NULL, false,
--                          "0");
-+      evsel = __add_event(list, idx, &attr, /*init_attr=*/true, /*name=*/NULL,
-+                          /*metric_id=*/NULL, /*pmu=*/NULL,
-+                          /*config_terms=*/NULL, /*auto_merge_stats=*/false,
-+                          /*cpu_list=*/"0");
-       if (!evsel)
-               return -ENOMEM;
-       evsel->tool_event = tool_event;
-@@ -475,7 +488,7 @@ int parse_events_add_cache(struct list_head *list, int *idx,
-       struct perf_event_attr attr;
-       LIST_HEAD(config_terms);
-       char name[MAX_NAME_LEN];
--      const char *config_name;
-+      const char *config_name, *metric_id;
-       int cache_type = -1, cache_op = -1, cache_result = -1;
-       char *op_result[2] = { op_result1, op_result2 };
-       int i, n, ret;
-@@ -540,13 +553,17 @@ int parse_events_add_cache(struct list_head *list, int *idx,
-                       return -ENOMEM;
-       }
-+      metric_id = get_config_metric_id(head_config);
-       ret = parse_events__add_cache_hybrid(list, idx, &attr,
--                                           config_name ? : name, &config_terms,
-+                                           config_name ? : name,
-+                                           metric_id,
-+                                           &config_terms,
-                                            &hybrid, parse_state);
-       if (hybrid)
-               goto out_free_terms;
--      ret = add_event(list, idx, &attr, config_name ? : name, &config_terms);
-+      ret = add_event(list, idx, &attr, config_name ? : name, metric_id,
-+                      &config_terms);
- out_free_terms:
-       free_config_terms(&config_terms);
-       return ret;
-@@ -1023,7 +1040,8 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx,
-       attr.type = PERF_TYPE_BREAKPOINT;
-       attr.sample_period = 1;
--      return add_event(list, idx, &attr, NULL, NULL);
-+      return add_event(list, idx, &attr, /*name=*/NULL, /*mertic_id=*/NULL,
-+                       /*config_terms=*/NULL);
- }
- static int check_type_val(struct parse_events_term *term,
-@@ -1068,6 +1086,7 @@ static const char *config_term_names[__PARSE_EVENTS__TERM_TYPE_NR] = {
-       [PARSE_EVENTS__TERM_TYPE_PERCORE]               = "percore",
-       [PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT]            = "aux-output",
-       [PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE]       = "aux-sample-size",
-+      [PARSE_EVENTS__TERM_TYPE_METRIC_ID]             = "metric-id",
- };
- static bool config_term_shrinked;
-@@ -1090,6 +1109,7 @@ config_term_avail(int term_type, struct parse_events_error *err)
-       case PARSE_EVENTS__TERM_TYPE_CONFIG1:
-       case PARSE_EVENTS__TERM_TYPE_CONFIG2:
-       case PARSE_EVENTS__TERM_TYPE_NAME:
-+      case PARSE_EVENTS__TERM_TYPE_METRIC_ID:
-       case PARSE_EVENTS__TERM_TYPE_SAMPLE_PERIOD:
-       case PARSE_EVENTS__TERM_TYPE_PERCORE:
-               return true;
-@@ -1180,6 +1200,9 @@ do {                                                                        \
-       case PARSE_EVENTS__TERM_TYPE_NAME:
-               CHECK_TYPE_VAL(STR);
-               break;
-+      case PARSE_EVENTS__TERM_TYPE_METRIC_ID:
-+              CHECK_TYPE_VAL(STR);
-+              break;
-       case PARSE_EVENTS__TERM_TYPE_MAX_STACK:
-               CHECK_TYPE_VAL(NUM);
-               break;
-@@ -1449,6 +1472,7 @@ int parse_events_add_numeric(struct parse_events_state *parse_state,
- {
-       struct perf_event_attr attr;
-       LIST_HEAD(config_terms);
-+      const char *name, *metric_id;
-       bool hybrid;
-       int ret;
-@@ -1465,14 +1489,16 @@ int parse_events_add_numeric(struct parse_events_state *parse_state,
-                       return -ENOMEM;
-       }
-+      name = get_config_name(head_config);
-+      metric_id = get_config_metric_id(head_config);
-       ret = parse_events__add_numeric_hybrid(parse_state, list, &attr,
--                                             get_config_name(head_config),
-+                                             name, metric_id,
-                                              &config_terms, &hybrid);
-       if (hybrid)
-               goto out_free_terms;
--      ret = add_event(list, &parse_state->idx, &attr,
--                      get_config_name(head_config), &config_terms);
-+      ret = add_event(list, &parse_state->idx, &attr, name, metric_id,
-+                      &config_terms);
- out_free_terms:
-       free_config_terms(&config_terms);
-       return ret;
-@@ -1574,8 +1600,11 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
-       if (!head_config) {
-               attr.type = pmu->type;
--              evsel = __add_event(list, &parse_state->idx, &attr, true, NULL,
--                                  pmu, NULL, auto_merge_stats, NULL);
-+              evsel = __add_event(list, &parse_state->idx, &attr,
-+                                  /*init_attr=*/true, /*name=*/NULL,
-+                                  /*metric_id=*/NULL, pmu,
-+                                  /*config_terms=*/NULL, auto_merge_stats,
-+                                  /*cpu_list=*/NULL);
-               if (evsel) {
-                       evsel->pmu_name = name ? strdup(name) : NULL;
-                       evsel->use_uncore_alias = use_uncore_alias;
-@@ -1628,9 +1657,10 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
-               return -EINVAL;
-       }
--      evsel = __add_event(list, &parse_state->idx, &attr, true,
--                          get_config_name(head_config), pmu,
--                          &config_terms, auto_merge_stats, NULL);
-+      evsel = __add_event(list, &parse_state->idx, &attr, /*init_attr=*/true,
-+                          get_config_name(head_config),
-+                          get_config_metric_id(head_config), pmu,
-+                          &config_terms, auto_merge_stats, /*cpu_list=*/NULL);
-       if (!evsel)
-               return -ENOMEM;
-@@ -3296,9 +3326,12 @@ char *parse_events_formats_error_string(char *additional_terms)
- struct evsel *parse_events__add_event_hybrid(struct list_head *list, int *idx,
-                                            struct perf_event_attr *attr,
--                                           const char *name, struct perf_pmu *pmu,
-+                                           const char *name,
-+                                           const char *metric_id,
-+                                           struct perf_pmu *pmu,
-                                            struct list_head *config_terms)
- {
--      return __add_event(list, idx, attr, true, name, pmu,
--                         config_terms, false, NULL);
-+      return __add_event(list, idx, attr, /*init_attr=*/true, name, metric_id,
-+                         pmu, config_terms, /*auto_merge_stats=*/false,
-+                         /*cpu_list=*/NULL);
- }
-diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
-index 6ef506c1b29e..9de27b7c9eec 100644
---- a/tools/perf/util/parse-events.h
-+++ b/tools/perf/util/parse-events.h
-@@ -87,6 +87,7 @@ enum {
-       PARSE_EVENTS__TERM_TYPE_PERCORE,
-       PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT,
-       PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE,
-+      PARSE_EVENTS__TERM_TYPE_METRIC_ID,
-       __PARSE_EVENTS__TERM_TYPE_NR,
- };
-@@ -200,7 +201,8 @@ int parse_events_add_pmu(struct parse_events_state *parse_state,
-                        bool use_alias);
- struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr,
--                                    const char *name, struct perf_pmu *pmu);
-+                                    const char *name, const char *metric_id,
-+                                    struct perf_pmu *pmu);
- int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
-                              char *str,
-@@ -268,6 +270,7 @@ int perf_pmu__test_parse_init(void);
- struct evsel *parse_events__add_event_hybrid(struct list_head *list, int *idx,
-                                            struct perf_event_attr *attr,
-                                            const char *name,
-+                                           const char *metric_id,
-                                            struct perf_pmu *pmu,
-                                            struct list_head *config_terms);
-diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l
-index 923849024b15..b752eb2c620a 100644
---- a/tools/perf/util/parse-events.l
-+++ b/tools/perf/util/parse-events.l
-@@ -295,6 +295,7 @@ no-overwrite               { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_NOOVERWRITE); }
- percore                       { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_PERCORE); }
- aux-output            { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT); }
- aux-sample-size               { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_SAMPLE_SIZE); }
-+metric-id             { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_METRIC_ID); }
- r{num_raw_hex}                { return raw(yyscanner); }
- r0x{num_raw_hex}      { return raw(yyscanner); }
- ,                     { return ','; }
-diff --git a/tools/perf/util/pfm.c b/tools/perf/util/pfm.c
-index 756295dedccc..f0bcfcab1a93 100644
---- a/tools/perf/util/pfm.c
-+++ b/tools/perf/util/pfm.c
-@@ -87,7 +87,8 @@ int parse_libpfm_events_option(const struct option *opt, const char *str,
-               pmu = perf_pmu__find_by_type((unsigned int)attr.type);
-               evsel = parse_events__add_event(evlist->core.nr_entries,
--                                              &attr, q, pmu);
-+                                              &attr, q, /*metric_id=*/NULL,
-+                                              pmu);
-               if (evsel == NULL)
-                       goto error;
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-parse-events-identify-broken-modifiers.patch b/queue-5.15/perf-parse-events-identify-broken-modifiers.patch
deleted file mode 100644 (file)
index 8759396..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-From c2cc7442de4aac9fadc5ea07cd3ebd72a4d0ee26 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 15 Oct 2021 10:21:31 -0700
-Subject: perf parse-events: Identify broken modifiers
-
-From: Ian Rogers <irogers@google.com>
-
-[ Upstream commit eabd4523395e4a8f2b049165642801f2ab8ff893 ]
-
-Previously the broken modifier causes a usage message to printed but
-nothing else.
-
-After:
-
-  $ perf stat -e 'cycles:kk' -a sleep 2
-  event syntax error: 'cycles:kk'
-                              \___ Bad modifier
-  Run 'perf list' for a list of valid events
-
-   Usage: perf stat [<options>] [<command>]
-
-      -e, --event <event>   event selector. use 'perf list' to list available events
-
-  $ perf stat -e '{instructions,cycles}:kk' -a sleep 2
-  event syntax error: '..ns,cycles}:kk'
-                                    \___ Bad modifier
-  Run 'perf list' for a list of valid events
-
-   Usage: perf stat [<options>] [<command>]
-
-      -e, --event <event>   event selector. use 'perf list' to list available events
-
-Signed-off-by: Ian Rogers <irogers@google.com>
-Acked-by: Andi Kleen <ak@linux.intel.com>
-Cc: Adrian Hunter <adrian.hunter@intel.com>
-Cc: Alexander Antonov <alexander.antonov@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Andrew Kilroy <andrew.kilroy@arm.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: Changbin Du <changbin.du@intel.com>
-Cc: Denys Zagorui <dzagorui@cisco.com>
-Cc: Fabian Hemmer <copy@copy.sh>
-Cc: Felix Fietkau <nbd@nbd.name>
-Cc: Heiko Carstens <hca@linux.ibm.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jacob Keller <jacob.e.keller@intel.com>
-Cc: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
-Cc: Jin Yao <yao.jin@linux.intel.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
-Cc: John Garry <john.garry@huawei.com>
-Cc: Kajol Jain <kjain@linux.ibm.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Kees Kook <keescook@chromium.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Nicholas Fraser <nfraser@codeweavers.com>
-Cc: Nick Desaulniers <ndesaulniers@google.com>
-Cc: Paul Clarke <pc@us.ibm.com>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Cc: Riccardo Mancini <rickyman7@gmail.com>
-Cc: Sami Tolvanen <samitolvanen@google.com>
-Cc: ShihCheng Tu <mrtoastcheng@gmail.com>
-Cc: Song Liu <songliubraving@fb.com>
-Cc: Stephane Eranian <eranian@google.com>
-Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
-Cc: Thomas Richter <tmricht@linux.ibm.com>
-Cc: Wan Jiabing <wanjiabing@vivo.com>
-Cc: Zhen Lei <thunder.leizhen@huawei.com>
-Link: https://lore.kernel.org/r/20211015172132.1162559-21-irogers@google.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/util/parse-events.y | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y
-index d94e48e1ff9b..467a426205a0 100644
---- a/tools/perf/util/parse-events.y
-+++ b/tools/perf/util/parse-events.y
-@@ -183,6 +183,11 @@ group_def ':' PE_MODIFIER_EVENT
-       err = parse_events__modifier_group(list, $3);
-       free($3);
-       if (err) {
-+              struct parse_events_state *parse_state = _parse_state;
-+              struct parse_events_error *error = parse_state->error;
-+
-+              parse_events__handle_error(error, @3.first_column,
-+                                         strdup("Bad modifier"), NULL);
-               free_list_evsel(list);
-               YYABORT;
-       }
-@@ -240,6 +245,11 @@ event_name PE_MODIFIER_EVENT
-       err = parse_events__modifier_event(list, $2, false);
-       free($2);
-       if (err) {
-+              struct parse_events_state *parse_state = _parse_state;
-+              struct parse_events_error *error = parse_state->error;
-+
-+              parse_events__handle_error(error, @2.first_column,
-+                                         strdup("Bad modifier"), NULL);
-               free_list_evsel(list);
-               YYABORT;
-       }
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-pmu-fix-alias-events-list.patch b/queue-5.15/perf-pmu-fix-alias-events-list.patch
deleted file mode 100644 (file)
index 21c5f2a..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-From e0257a01d6689c273a019756ed5e13911cc1bfed Mon Sep 17 00:00:00 2001
-From: John Garry <john.garry@huawei.com>
-Date: Wed, 22 Dec 2021 00:11:30 +0800
-Subject: perf pmu: Fix alias events list
-
-From: John Garry <john.garry@huawei.com>
-
-commit e0257a01d6689c273a019756ed5e13911cc1bfed upstream.
-
-Commit 0e0ae8742207c3b4 ("perf list: Display hybrid PMU events with cpu
-type") changes the event list for uncore PMUs or arm64 heterogeneous CPU
-systems, such that duplicate aliases are incorrectly listed per PMU
-(which they should not be), like:
-
-  # perf list
-  ...
-  unc_cbo_cache_lookup.any_es
-  [Unit: uncore_cbox L3 Lookup any request that access cache and found
-  line in E or S-state]
-  unc_cbo_cache_lookup.any_es
-  [Unit: uncore_cbox L3 Lookup any request that access cache and found
-  line in E or S-state]
-  unc_cbo_cache_lookup.any_i
-  [Unit: uncore_cbox L3 Lookup any request that access cache and found
-  line in I-state]
-  unc_cbo_cache_lookup.any_i
-  [Unit: uncore_cbox L3 Lookup any request that access cache and found
-  line in I-state]
-  ...
-
-Notice how the events are listed twice.
-
-The named commit changed how we remove duplicate events, in that events
-for different PMUs are not treated as duplicates. I suppose this is to
-handle how "Each hybrid pmu event has been assigned with a pmu name".
-
-Fix PMU alias listing by restoring behaviour to remove duplicates for
-non-hybrid PMUs.
-
-Fixes: 0e0ae8742207c3b4 ("perf list: Display hybrid PMU events with cpu type")
-Signed-off-by: John Garry <john.garry@huawei.com>
-Tested-by: Zhengjun Xing <zhengjun.xing@linux.intel.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Ian Rogers <irogers@google.com>
-Cc: Ingo Molnar <mingo@redhat.com>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Kan Liang <kan.liang@linux.intel.com>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Peter Zijlstra <peterz@infradead.org>
-Link: https://lore.kernel.org/r/1640103090-140490-1-git-send-email-john.garry@huawei.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- tools/perf/util/pmu.c |   23 +++++++++++++++++------
- 1 file changed, 17 insertions(+), 6 deletions(-)
-
---- a/tools/perf/util/pmu.c
-+++ b/tools/perf/util/pmu.c
-@@ -1659,6 +1659,21 @@ bool is_pmu_core(const char *name)
-       return !strcmp(name, "cpu") || is_arm_pmu_core(name);
- }
-+static bool pmu_alias_is_duplicate(struct sevent *alias_a,
-+                                 struct sevent *alias_b)
-+{
-+      /* Different names -> never duplicates */
-+      if (strcmp(alias_a->name, alias_b->name))
-+              return false;
-+
-+      /* Don't remove duplicates for hybrid PMUs */
-+      if (perf_pmu__is_hybrid(alias_a->pmu) &&
-+          perf_pmu__is_hybrid(alias_b->pmu))
-+              return false;
-+
-+      return true;
-+}
-+
- void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag,
-                       bool long_desc, bool details_flag, bool deprecated,
-                       const char *pmu_name)
-@@ -1744,12 +1759,8 @@ void print_pmu_events(const char *event_
-       qsort(aliases, len, sizeof(struct sevent), cmp_sevent);
-       for (j = 0; j < len; j++) {
-               /* Skip duplicates */
--              if (j > 0 && !strcmp(aliases[j].name, aliases[j - 1].name)) {
--                      if (!aliases[j].pmu || !aliases[j - 1].pmu ||
--                          !strcmp(aliases[j].pmu, aliases[j - 1].pmu)) {
--                              continue;
--                      }
--              }
-+              if (j > 0 && pmu_alias_is_duplicate(&aliases[j], &aliases[j - 1]))
-+                      continue;
-               if (name_only) {
-                       printf("%s ", aliases[j].name);
diff --git a/queue-5.15/perf-tools-check-vmlinux-kallsyms-arguments-in-all-t.patch b/queue-5.15/perf-tools-check-vmlinux-kallsyms-arguments-in-all-t.patch
deleted file mode 100644 (file)
index eab3cf1..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-From 5bfe448a3416e5cb7fe7c43623279e9d0c811407 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 18 Oct 2021 14:48:42 +0100
-Subject: perf tools: Check vmlinux/kallsyms arguments in all tools
-
-From: James Clark <james.clark@arm.com>
-
-[ Upstream commit 7cc72553ac03ec20afe2dec91dce4624ccd379b8 ]
-
-Only perf report checked the validity of these arguments so apply the
-same check to all tools that read them for consistency.
-
-Signed-off-by: James Clark <james.clark@arm.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Denis Nikitin <denik@chromium.org>
-Cc: Jiri Olsa <jolsa@redhat.com>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Link: https://lore.kernel.org/r/20211018134844.2627174-3-james.clark@arm.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/builtin-annotate.c | 4 ++++
- tools/perf/builtin-c2c.c      | 4 ++++
- tools/perf/builtin-probe.c    | 5 +++++
- tools/perf/builtin-record.c   | 4 ++++
- tools/perf/builtin-sched.c    | 4 ++++
- tools/perf/builtin-script.c   | 3 +++
- tools/perf/builtin-top.c      | 4 ++++
- 7 files changed, 28 insertions(+)
-
-diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
-index 05eb098cb0e3..490bb9b8cf17 100644
---- a/tools/perf/builtin-annotate.c
-+++ b/tools/perf/builtin-annotate.c
-@@ -591,6 +591,10 @@ int cmd_annotate(int argc, const char **argv)
-               return ret;
-       }
-+      ret = symbol__validate_sym_arguments();
-+      if (ret)
-+              return ret;
-+
-       if (quiet)
-               perf_quiet_option();
-diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
-index e6f900c3accb..6d901ba6678f 100644
---- a/tools/perf/builtin-c2c.c
-+++ b/tools/perf/builtin-c2c.c
-@@ -2770,6 +2770,10 @@ static int perf_c2c__report(int argc, const char **argv)
-       if (c2c.stats_only)
-               c2c.use_stdio = true;
-+      err = symbol__validate_sym_arguments();
-+      if (err)
-+              goto out;
-+
-       if (!input_name || !strlen(input_name))
-               input_name = "perf.data";
-diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
-index e1dd51f2874b..c31627af75d4 100644
---- a/tools/perf/builtin-probe.c
-+++ b/tools/perf/builtin-probe.c
-@@ -21,6 +21,7 @@
- #include "util/build-id.h"
- #include "util/strlist.h"
- #include "util/strfilter.h"
-+#include "util/symbol.h"
- #include "util/symbol_conf.h"
- #include "util/debug.h"
- #include <subcmd/parse-options.h>
-@@ -629,6 +630,10 @@ __cmd_probe(int argc, const char **argv)
-               params.command = 'a';
-       }
-+      ret = symbol__validate_sym_arguments();
-+      if (ret)
-+              return ret;
-+
-       if (params.quiet) {
-               if (verbose != 0) {
-                       pr_err("  Error: -v and -q are exclusive.\n");
-diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
-index b3509d9d20cc..dcb3ed24fc4a 100644
---- a/tools/perf/builtin-record.c
-+++ b/tools/perf/builtin-record.c
-@@ -2680,6 +2680,10 @@ int cmd_record(int argc, const char **argv)
-       if (quiet)
-               perf_quiet_option();
-+      err = symbol__validate_sym_arguments();
-+      if (err)
-+              return err;
-+
-       /* Make system wide (-a) the default target. */
-       if (!argc && target__none(&rec->opts.target))
-               rec->opts.target.system_wide = true;
-diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
-index 635a6b5a9ec9..4527f632ebe4 100644
---- a/tools/perf/builtin-sched.c
-+++ b/tools/perf/builtin-sched.c
-@@ -3538,6 +3538,7 @@ int cmd_sched(int argc, const char **argv)
-               .fork_event         = replay_fork_event,
-       };
-       unsigned int i;
-+      int ret;
-       for (i = 0; i < ARRAY_SIZE(sched.curr_pid); i++)
-               sched.curr_pid[i] = -1;
-@@ -3598,6 +3599,9 @@ int cmd_sched(int argc, const char **argv)
-                               parse_options_usage(NULL, timehist_options, "n", true);
-                       return -EINVAL;
-               }
-+              ret = symbol__validate_sym_arguments();
-+              if (ret)
-+                      return ret;
-               return perf_sched__timehist(&sched);
-       } else {
-diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
-index c6c40191933d..f346275c9d21 100644
---- a/tools/perf/builtin-script.c
-+++ b/tools/perf/builtin-script.c
-@@ -3839,6 +3839,9 @@ int cmd_script(int argc, const char **argv)
-       data.path  = input_name;
-       data.force = symbol_conf.force;
-+      if (symbol__validate_sym_arguments())
-+              return -1;
-+
-       if (argc > 1 && !strncmp(argv[0], "rec", strlen("rec"))) {
-               rec_script_path = get_script_path(argv[1], RECORD_SUFFIX);
-               if (!rec_script_path)
-diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
-index a3ae9176a83e..aa5190ecc72a 100644
---- a/tools/perf/builtin-top.c
-+++ b/tools/perf/builtin-top.c
-@@ -1618,6 +1618,10 @@ int cmd_top(int argc, const char **argv)
-       if (argc)
-               usage_with_options(top_usage, options);
-+      status = symbol__validate_sym_arguments();
-+      if (status)
-+              goto out_delete_evlist;
-+
-       if (annotate_check_args(&top.annotation_opts) < 0)
-               goto out_delete_evlist;
--- 
-2.35.1
-
diff --git a/queue-5.15/perf-tools-enhance-the-matching-of-sub-commands-abbr.patch b/queue-5.15/perf-tools-enhance-the-matching-of-sub-commands-abbr.patch
deleted file mode 100644 (file)
index 9c8f000..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-From dfd877595c7a1781e02f81c5307883c321f5b8c6 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 25 Mar 2022 17:20:32 +0800
-Subject: perf tools: Enhance the matching of sub-commands abbreviations
-
-From: Wei Li <liwei391@huawei.com>
-
-[ Upstream commit ae0f4eb34fc3014f7eba78fab90a0e98e441a4cd ]
-
-We support short command 'rec*' for 'record' and 'rep*' for 'report' in
-lots of sub-commands, but the matching is not quite strict currnetly.
-
-It may be puzzling sometime, like we mis-type a 'recport' to report but
-it will perform 'record' in fact without any message.
-
-To fix this, add a check to ensure that the short cmd is valid prefix
-of the real command.
-
-Committer testing:
-
-  [root@quaco ~]# perf c2c re sleep 1
-
-   Usage: perf c2c {record|report}
-
-      -v, --verbose         be more verbose (show counter open errors, etc)
-
-  # perf c2c rec sleep 1
-  [ perf record: Woken up 1 times to write data ]
-  [ perf record: Captured and wrote 0.038 MB perf.data (16 samples) ]
-  # perf c2c recport sleep 1
-
-   Usage: perf c2c {record|report}
-
-      -v, --verbose         be more verbose (show counter open errors, etc)
-
-  # perf c2c record sleep 1
-  [ perf record: Woken up 1 times to write data ]
-  [ perf record: Captured and wrote 0.038 MB perf.data (15 samples) ]
-  # perf c2c records sleep 1
-
-   Usage: perf c2c {record|report}
-
-      -v, --verbose         be more verbose (show counter open errors, etc)
-
-  #
-
-Signed-off-by: Wei Li <liwei391@huawei.com>
-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
-Cc: Hanjun Guo <guohanjun@huawei.com>
-Cc: Jiri Olsa <jolsa@kernel.org>
-Cc: Mark Rutland <mark.rutland@arm.com>
-Cc: Namhyung Kim <namhyung@kernel.org>
-Cc: Rui Xiang <rui.xiang@huawei.com>
-Link: http://lore.kernel.org/lkml/20220325092032.2956161-1-liwei391@huawei.com
-Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-Stable-dep-of: 71c86cda750b ("perf parse-events: Remove "not supported" hybrid cache events")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- tools/perf/builtin-c2c.c       | 5 +++--
- tools/perf/builtin-kmem.c      | 2 +-
- tools/perf/builtin-kvm.c       | 9 +++++----
- tools/perf/builtin-lock.c      | 5 +++--
- tools/perf/builtin-mem.c       | 5 +++--
- tools/perf/builtin-sched.c     | 4 ++--
- tools/perf/builtin-script.c    | 4 ++--
- tools/perf/builtin-stat.c      | 4 ++--
- tools/perf/builtin-timechart.c | 3 ++-
- 9 files changed, 23 insertions(+), 18 deletions(-)
-
-diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
-index 6d901ba6678f..ba798c64fed9 100644
---- a/tools/perf/builtin-c2c.c
-+++ b/tools/perf/builtin-c2c.c
-@@ -44,6 +44,7 @@
- #include "../perf.h"
- #include "pmu.h"
- #include "pmu-hybrid.h"
-+#include "string2.h"
- struct c2c_hists {
-       struct hists            hists;
-@@ -3026,9 +3027,9 @@ int cmd_c2c(int argc, const char **argv)
-       if (!argc)
-               usage_with_options(c2c_usage, c2c_options);
--      if (!strncmp(argv[0], "rec", 3)) {
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               return perf_c2c__record(argc, argv);
--      } else if (!strncmp(argv[0], "rep", 3)) {
-+      } else if (strlen(argv[0]) > 2 && strstarts("report", argv[0])) {
-               return perf_c2c__report(argc, argv);
-       } else {
-               usage_with_options(c2c_usage, c2c_options);
-diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
-index da03a341c63c..8595e6a92d39 100644
---- a/tools/perf/builtin-kmem.c
-+++ b/tools/perf/builtin-kmem.c
-@@ -1946,7 +1946,7 @@ int cmd_kmem(int argc, const char **argv)
-                       kmem_page = 1;
-       }
--      if (!strncmp(argv[0], "rec", 3)) {
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               symbol__init(NULL);
-               return __cmd_record(argc, argv);
-       }
-diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
-index aa1b127ffb5b..38735c405573 100644
---- a/tools/perf/builtin-kvm.c
-+++ b/tools/perf/builtin-kvm.c
-@@ -24,6 +24,7 @@
- #include "util/ordered-events.h"
- #include "util/kvm-stat.h"
- #include "ui/ui.h"
-+#include "util/string2.h"
- #include <sys/prctl.h>
- #ifdef HAVE_TIMERFD_SUPPORT
-@@ -1500,10 +1501,10 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
-               goto perf_stat;
-       }
--      if (!strncmp(argv[1], "rec", 3))
-+      if (strlen(argv[1]) > 2 && strstarts("record", argv[1]))
-               return kvm_events_record(&kvm, argc - 1, argv + 1);
--      if (!strncmp(argv[1], "rep", 3))
-+      if (strlen(argv[1]) > 2 && strstarts("report", argv[1]))
-               return kvm_events_report(&kvm, argc - 1 , argv + 1);
- #ifdef HAVE_TIMERFD_SUPPORT
-@@ -1631,9 +1632,9 @@ int cmd_kvm(int argc, const char **argv)
-               }
-       }
--      if (!strncmp(argv[0], "rec", 3))
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0]))
-               return __cmd_record(file_name, argc, argv);
--      else if (!strncmp(argv[0], "rep", 3))
-+      else if (strlen(argv[0]) > 2 && strstarts("report", argv[0]))
-               return __cmd_report(file_name, argc, argv);
-       else if (!strncmp(argv[0], "diff", 4))
-               return cmd_diff(argc, argv);
-diff --git a/tools/perf/builtin-lock.c b/tools/perf/builtin-lock.c
-index d70131b7b1b1..24d402e84022 100644
---- a/tools/perf/builtin-lock.c
-+++ b/tools/perf/builtin-lock.c
-@@ -18,6 +18,7 @@
- #include "util/session.h"
- #include "util/tool.h"
- #include "util/data.h"
-+#include "util/string2.h"
- #include <sys/types.h>
- #include <sys/prctl.h>
-@@ -997,9 +998,9 @@ int cmd_lock(int argc, const char **argv)
-       if (!argc)
-               usage_with_options(lock_usage, lock_options);
--      if (!strncmp(argv[0], "rec", 3)) {
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               return __cmd_record(argc, argv);
--      } else if (!strncmp(argv[0], "report", 6)) {
-+      } else if (strlen(argv[0]) > 2 && strstarts("report", argv[0])) {
-               trace_handler = &report_lock_ops;
-               if (argc) {
-                       argc = parse_options(argc, argv,
-diff --git a/tools/perf/builtin-mem.c b/tools/perf/builtin-mem.c
-index fcf65a59bea2..9e435fd23503 100644
---- a/tools/perf/builtin-mem.c
-+++ b/tools/perf/builtin-mem.c
-@@ -20,6 +20,7 @@
- #include "util/symbol.h"
- #include "util/pmu.h"
- #include "util/pmu-hybrid.h"
-+#include "util/string2.h"
- #include <linux/err.h>
- #define MEM_OPERATION_LOAD    0x1
-@@ -496,9 +497,9 @@ int cmd_mem(int argc, const char **argv)
-                       mem.input_name = "perf.data";
-       }
--      if (!strncmp(argv[0], "rec", 3))
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0]))
-               return __cmd_record(argc, argv, &mem);
--      else if (!strncmp(argv[0], "rep", 3))
-+      else if (strlen(argv[0]) > 2 && strstarts("report", argv[0]))
-               return report_events(argc, argv, &mem);
-       else
-               usage_with_options(mem_usage, mem_options);
-diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
-index 4527f632ebe4..2cf806d66b1c 100644
---- a/tools/perf/builtin-sched.c
-+++ b/tools/perf/builtin-sched.c
-@@ -3554,7 +3554,7 @@ int cmd_sched(int argc, const char **argv)
-       if (!strcmp(argv[0], "script"))
-               return cmd_script(argc, argv);
--      if (!strncmp(argv[0], "rec", 3)) {
-+      if (strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               return __cmd_record(argc, argv);
-       } else if (!strncmp(argv[0], "lat", 3)) {
-               sched.tp_handler = &lat_ops;
-@@ -3574,7 +3574,7 @@ int cmd_sched(int argc, const char **argv)
-               sched.tp_handler = &map_ops;
-               setup_sorting(&sched, latency_options, latency_usage);
-               return perf_sched__map(&sched);
--      } else if (!strncmp(argv[0], "rep", 3)) {
-+      } else if (strlen(argv[0]) > 2 && strstarts("replay", argv[0])) {
-               sched.tp_handler = &replay_ops;
-               if (argc) {
-                       argc = parse_options(argc, argv, replay_options, replay_usage, 0);
-diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
-index f346275c9d21..4baaf5652a42 100644
---- a/tools/perf/builtin-script.c
-+++ b/tools/perf/builtin-script.c
-@@ -3842,13 +3842,13 @@ int cmd_script(int argc, const char **argv)
-       if (symbol__validate_sym_arguments())
-               return -1;
--      if (argc > 1 && !strncmp(argv[0], "rec", strlen("rec"))) {
-+      if (argc > 1 && strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               rec_script_path = get_script_path(argv[1], RECORD_SUFFIX);
-               if (!rec_script_path)
-                       return cmd_record(argc, argv);
-       }
--      if (argc > 1 && !strncmp(argv[0], "rep", strlen("rep"))) {
-+      if (argc > 1 && strlen(argv[0]) > 2 && strstarts("report", argv[0])) {
-               rep_script_path = get_script_path(argv[1], REPORT_SUFFIX);
-               if (!rep_script_path) {
-                       fprintf(stderr,
-diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
-index abf88a1ad455..002eecc59536 100644
---- a/tools/perf/builtin-stat.c
-+++ b/tools/perf/builtin-stat.c
-@@ -2255,11 +2255,11 @@ int cmd_stat(int argc, const char **argv)
-       } else
-               stat_config.csv_sep = DEFAULT_SEPARATOR;
--      if (argc && !strncmp(argv[0], "rec", 3)) {
-+      if (argc && strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               argc = __cmd_record(argc, argv);
-               if (argc < 0)
-                       return -1;
--      } else if (argc && !strncmp(argv[0], "rep", 3))
-+      } else if (argc && strlen(argv[0]) > 2 && strstarts("report", argv[0]))
-               return __cmd_report(argc, argv);
-       interval = stat_config.interval;
-diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c
-index 43bf4d67edb0..afce731cec16 100644
---- a/tools/perf/builtin-timechart.c
-+++ b/tools/perf/builtin-timechart.c
-@@ -35,6 +35,7 @@
- #include "util/tool.h"
- #include "util/data.h"
- #include "util/debug.h"
-+#include "util/string2.h"
- #include <linux/err.h>
- #ifdef LACKS_OPEN_MEMSTREAM_PROTOTYPE
-@@ -1983,7 +1984,7 @@ int cmd_timechart(int argc, const char **argv)
-               return -1;
-       }
--      if (argc && !strncmp(argv[0], "rec", 3)) {
-+      if (argc && strlen(argv[0]) > 2 && strstarts("record", argv[0])) {
-               argc = parse_options(argc, argv, timechart_record_options,
-                                    timechart_record_usage,
-                                    PARSE_OPT_STOP_AT_NON_OPTION);
--- 
-2.35.1
-
index 8647f654635c05a060a85459b75c6dd12c0842f9..98e9029a4b882b81dc809fa813ff3f06368116b4 100644 (file)
@@ -68,14 +68,5 @@ don-t-use-__kernel_write-on-kmap_local_page.patch
 clk-imx-imx6sx-remove-the-set_rate_parent-flag-for-q.patch
 clk-iproc-do-not-rely-on-node-name-for-correct-pll-s.patch
 kvm-x86-hide-ia32_platform_dca_cap-31-0-from-the-gue.patch
-perf-metric-add-documentation-and-rename-a-variable.patch
-perf-metric-only-add-a-referenced-metric-once.patch
-perf-parse-events-add-const-to-evsel-name.patch
-perf-parse-events-add-new-metric-id-term.patch
-perf-parse-events-identify-broken-modifiers.patch
-perf-list-display-hybrid-pmu-events-with-cpu-type.patch
-perf-tools-check-vmlinux-kallsyms-arguments-in-all-t.patch
-perf-tools-enhance-the-matching-of-sub-commands-abbr.patch
 x86-alternative-fix-race-in-try_get_desc.patch
 drm-i915-gem-really-move-i915_gem_context.link-under-ref-protection.patch
-perf-pmu-fix-alias-events-list.patch