perf pmu: Add const to pmu_events_map.
authorIan Rogers <irogers@google.com>
Fri, 15 Oct 2021 17:21:13 +0000 (10:21 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 20 Oct 2021 13:31:47 +0000 (10:31 -0300)
The pmu_events_map is generated at compile time and used for lookup. For
testing purposes we need to swap the map being used.

Having the pmu_events_map be non-const is misleading as it may be an out
argument.

Make it const and update uses so they work on const too.

Reviewed-by: John Garry <john.garry@huawei.com>
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: 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-3-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/arch/arm64/util/pmu.c
tools/perf/pmu-events/jevents.c
tools/perf/pmu-events/pmu-events.h
tools/perf/tests/expand-cgroup.c
tools/perf/tests/parse-metric.c
tools/perf/tests/pmu-events.c
tools/perf/util/metricgroup.c
tools/perf/util/metricgroup.h
tools/perf/util/pmu.c
tools/perf/util/pmu.h
tools/perf/util/s390-sample-raw.c

index 2234fbd0a912f03d23b456eb383694880029bfcd..d3a18f9c85f6a731bfe72dca8002c95e334a4eaa 100644 (file)
@@ -3,7 +3,7 @@
 #include "../../../util/cpumap.h"
 #include "../../../util/pmu.h"
 
-struct pmu_events_map *pmu_events_map__find(void)
+const struct pmu_events_map *pmu_events_map__find(void)
 {
        struct perf_pmu *pmu = NULL;
 
index b7c8aae6bcf155f8ae35c393c7fa3208a4bf3d60..bff8f92733fe482c33bca26c9fffa27a96ca2379 100644 (file)
@@ -798,7 +798,7 @@ static bool is_sys_dir(char *fname)
 
 static void print_mapping_table_prefix(FILE *outfp)
 {
-       fprintf(outfp, "struct pmu_events_map pmu_events_map[] = {\n");
+       fprintf(outfp, "const struct pmu_events_map pmu_events_map[] = {\n");
 }
 
 static void print_mapping_table_suffix(FILE *outfp)
index 5c2bf7275c1c693760821bd14b343d7bbc5786e3..42c6db6bedec373457c52ad16aa847617e43ab2f 100644 (file)
@@ -53,7 +53,7 @@ struct pmu_sys_events {
  * Global table mapping each known CPU for the architecture to its
  * table of PMU events.
  */
-extern struct pmu_events_map pmu_events_map[];
+extern const struct pmu_events_map pmu_events_map[];
 extern struct pmu_sys_events pmu_sys_event_tables[];
 
 #endif
index 0e46aeb843ce4cc86d6c653a85f8f237a87f9ec1..aaad51aba12ff30799269afbbeb26bdb0897e70f 100644 (file)
@@ -193,7 +193,7 @@ static int expand_metric_events(void)
                        .metric_name    = NULL,
                },
        };
-       struct pmu_events_map ev_map = {
+       const struct pmu_events_map ev_map = {
                .cpuid          = "test",
                .version        = "1",
                .type           = "core",
index 4f6f4904e8520dc5e533968d6deaa3f316a240f6..dfc797ecc75095c6ec8c8b238909f27737eca8ea 100644 (file)
@@ -79,7 +79,7 @@ static struct pmu_event pme_test[] = {
 }
 };
 
-static struct pmu_events_map map = {
+static const struct pmu_events_map map = {
        .cpuid          = "test",
        .version        = "1",
        .type           = "core",
index d3534960ed2585e3c730c6fba0032151161bd5b8..8a1fdcd072f52b3936bb376dc635339fa69b0372 100644 (file)
@@ -242,9 +242,9 @@ static bool is_same(const char *reference, const char *test)
        return !strcmp(reference, test);
 }
 
-static struct pmu_events_map *__test_pmu_get_events_map(void)
+static const struct pmu_events_map *__test_pmu_get_events_map(void)
 {
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
 
        for (map = &pmu_events_map[0]; map->cpuid; map++) {
                if (!strcmp(map->cpuid, "testcpu"))
@@ -421,7 +421,7 @@ static int compare_alias_to_test_event(struct perf_pmu_alias *alias,
 static int test_pmu_event_table(void)
 {
        struct pmu_event *sys_event_tables = __test_pmu_get_sys_events_table();
-       struct pmu_events_map *map = __test_pmu_get_events_map();
+       const struct pmu_events_map *map = __test_pmu_get_events_map();
        struct pmu_event *table;
        int map_events = 0, expected_events;
 
@@ -518,7 +518,7 @@ static int __test_core_pmu_event_aliases(char *pmu_name, int *count)
        struct perf_pmu *pmu;
        LIST_HEAD(aliases);
        int res = 0;
-       struct pmu_events_map *map = __test_pmu_get_events_map();
+       const struct pmu_events_map *map = __test_pmu_get_events_map();
        struct perf_pmu_alias *a, *tmp;
 
        if (!map)
@@ -571,7 +571,7 @@ static int __test_uncore_pmu_event_aliases(struct perf_pmu_test_pmu *test_pmu)
        struct perf_pmu *pmu = &test_pmu->pmu;
        const char *pmu_name = pmu->name;
        struct perf_pmu_alias *a, *tmp, *alias;
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
        LIST_HEAD(aliases);
        int res = 0;
 
@@ -825,7 +825,7 @@ struct metric {
 
 static int resolve_metric_simple(struct expr_parse_ctx *pctx,
                                 struct list_head *compound_list,
-                                struct pmu_events_map *map,
+                                const struct pmu_events_map *map,
                                 const char *metric_name)
 {
        struct hashmap_entry *cur, *cur_tmp;
@@ -885,8 +885,8 @@ out_err:
 
 static int test_parsing(void)
 {
-       struct pmu_events_map *cpus_map = pmu_events_map__find();
-       struct pmu_events_map *map;
+       const struct pmu_events_map *cpus_map = pmu_events_map__find();
+       const struct pmu_events_map *map;
        struct pmu_event *pe;
        int i, j, k;
        int ret = 0;
@@ -1027,7 +1027,7 @@ out:
  */
 static int test_parsing_fake(void)
 {
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
        struct pmu_event *pe;
        unsigned int i, j;
        int err = 0;
index 8ba5370f5f6430bfc1f39172ca83f572921632a7..74ea0a3540ce1944fa62c6baf46e50a28302ab94 100644 (file)
@@ -623,7 +623,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)
 {
-       struct pmu_events_map *map = pmu_events_map__find();
+       const struct pmu_events_map *map = pmu_events_map__find();
        struct pmu_event *pe;
        int i;
        struct rblist groups;
@@ -910,7 +910,7 @@ static int __add_metric(struct list_head *metric_list,
                     match_metric(__pe->metric_name, __metric)))
 
 struct pmu_event *metricgroup__find_metric(const char *metric,
-                                          struct pmu_events_map *map)
+                                          const struct pmu_events_map *map)
 {
        struct pmu_event *pe;
        int i;
@@ -977,7 +977,7 @@ static int add_metric(struct list_head *metric_list,
 static int __resolve_metric(struct metric *m,
                            bool metric_no_group,
                            struct list_head *metric_list,
-                           struct pmu_events_map *map,
+                           const struct pmu_events_map *map,
                            struct expr_ids *ids)
 {
        struct hashmap_entry *cur;
@@ -1025,7 +1025,7 @@ static int __resolve_metric(struct metric *m,
 
 static int resolve_metric(bool metric_no_group,
                          struct list_head *metric_list,
-                         struct pmu_events_map *map,
+                         const struct pmu_events_map *map,
                          struct expr_ids *ids)
 {
        struct metric *m;
@@ -1099,7 +1099,7 @@ out:
 static int metricgroup__add_metric(const char *metric, bool metric_no_group,
                                   struct strbuf *events,
                                   struct list_head *metric_list,
-                                  struct pmu_events_map *map)
+                                  const struct pmu_events_map *map)
 {
        struct expr_ids ids = { .cnt = 0, };
        struct pmu_event *pe;
@@ -1173,7 +1173,7 @@ out:
 static int metricgroup__add_metric_list(const char *list, bool metric_no_group,
                                        struct strbuf *events,
                                        struct list_head *metric_list,
-                                       struct pmu_events_map *map)
+                                       const struct pmu_events_map *map)
 {
        char *llist, *nlist, *p;
        int ret = -EINVAL;
@@ -1230,7 +1230,7 @@ static int parse_groups(struct evlist *perf_evlist, const char *str,
                        bool metric_no_merge,
                        struct perf_pmu *fake_pmu,
                        struct rblist *metric_events,
-                       struct pmu_events_map *map)
+                       const struct pmu_events_map *map)
 {
        struct parse_events_error parse_error;
        struct strbuf extra_events;
@@ -1266,14 +1266,14 @@ int metricgroup__parse_groups(const struct option *opt,
                              struct rblist *metric_events)
 {
        struct evlist *perf_evlist = *(struct evlist **)opt->value;
-       struct pmu_events_map *map = pmu_events_map__find();
+       const struct pmu_events_map *map = pmu_events_map__find();
 
        return parse_groups(perf_evlist, str, metric_no_group,
                            metric_no_merge, NULL, metric_events, map);
 }
 
 int metricgroup__parse_groups_test(struct evlist *evlist,
-                                  struct pmu_events_map *map,
+                                  const struct pmu_events_map *map,
                                   const char *str,
                                   bool metric_no_group,
                                   bool metric_no_merge,
@@ -1285,7 +1285,7 @@ int metricgroup__parse_groups_test(struct evlist *evlist,
 
 bool metricgroup__has_metric(const char *metric)
 {
-       struct pmu_events_map *map = pmu_events_map__find();
+       const struct pmu_events_map *map = pmu_events_map__find();
        struct pmu_event *pe;
        int i;
 
index cc4a92492a613022b068afd193e77df2c326db72..c931596557bf8aea40b54c552c808034c2d191da 100644 (file)
@@ -44,9 +44,9 @@ int metricgroup__parse_groups(const struct option *opt,
                              bool metric_no_merge,
                              struct rblist *metric_events);
 struct pmu_event *metricgroup__find_metric(const char *metric,
-                                          struct pmu_events_map *map);
+                                          const struct pmu_events_map *map);
 int metricgroup__parse_groups_test(struct evlist *evlist,
-                                  struct pmu_events_map *map,
+                                  const struct pmu_events_map *map,
                                   const char *str,
                                   bool metric_no_group,
                                   bool metric_no_merge,
index bdabd62170d2cf1f88ab0ddc414b0c0c416c6d52..4bcdc595ce5e9138ea68bfaffcc46576230bd559 100644 (file)
@@ -710,9 +710,9 @@ static char *perf_pmu__getcpuid(struct perf_pmu *pmu)
        return cpuid;
 }
 
-struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu)
+const struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu)
 {
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
        char *cpuid = perf_pmu__getcpuid(pmu);
        int i;
 
@@ -737,7 +737,7 @@ struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu)
        return map;
 }
 
-struct pmu_events_map *__weak pmu_events_map__find(void)
+const struct pmu_events_map *__weak pmu_events_map__find(void)
 {
        return perf_pmu__find_map(NULL);
 }
@@ -824,7 +824,7 @@ out:
  * as aliases.
  */
 void pmu_add_cpu_aliases_map(struct list_head *head, struct perf_pmu *pmu,
-                            struct pmu_events_map *map)
+                            const struct pmu_events_map *map)
 {
        int i;
        const char *name = pmu->name;
@@ -859,7 +859,7 @@ new_alias:
 
 static void pmu_add_cpu_aliases(struct list_head *head, struct perf_pmu *pmu)
 {
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
 
        map = perf_pmu__find_map(pmu);
        if (!map)
index 394898b07fd9874b8e69047092e49019dd807bfd..dd5cdde6a3d0907f375919d5686af7391faa61da 100644 (file)
@@ -120,10 +120,10 @@ int perf_pmu__test(void);
 
 struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu);
 void pmu_add_cpu_aliases_map(struct list_head *head, struct perf_pmu *pmu,
-                            struct pmu_events_map *map);
+                            const struct pmu_events_map *map);
 
-struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu);
-struct pmu_events_map *pmu_events_map__find(void);
+const struct pmu_events_map *perf_pmu__find_map(struct perf_pmu *pmu);
+const struct pmu_events_map *pmu_events_map__find(void);
 bool pmu_uncore_alias_match(const char *pmu_name, const char *name);
 void perf_pmu_free_alias(struct perf_pmu_alias *alias);
 
index 08ec3c3ae0ee6a6465d879978e54d28fa0c4cc80..13f33d1ddb7847784733fb3403f1b0e9110689db 100644 (file)
@@ -135,7 +135,7 @@ static int get_counterset_start(int setnr)
  * the name of this counter.
  * If no match is found a NULL pointer is returned.
  */
-static const char *get_counter_name(int set, int nr, struct pmu_events_map *map)
+static const char *get_counter_name(int set, int nr, const struct pmu_events_map *map)
 {
        int rc, event_nr, wanted = get_counterset_start(set) + nr;
 
@@ -159,7 +159,7 @@ static void s390_cpumcfdg_dump(struct perf_sample *sample)
        unsigned char *buf = sample->raw_data;
        const char *color = PERF_COLOR_BLUE;
        struct cf_ctrset_entry *cep, ce;
-       struct pmu_events_map *map;
+       const struct pmu_events_map *map;
        u64 *p;
 
        map = pmu_events_map__find();