Allow assigning categories "Topics" field to the PMU events  i.e.
process the topic field from the JSON file and add a corresponding
topic field to the generated C events tables.

Signed-off-by: Andi Kleen <a...@linux.intel.com>
Signed-off-by: Sukadev Bhattiprolu <suka...@linux.vnet.ibm.com>
Acked-by: Jiri Olsa <jo...@redhat.com>
---

Changelog[v14]
        [Jiri Olsa] Move this independent code off into a separate patch.
---
 tools/perf/pmu-events/jevents.c    | 12 +++++++++---
 tools/perf/pmu-events/jevents.h    |  2 +-
 tools/perf/pmu-events/pmu-events.h |  1 +
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c
index 51b864a..a4f117c 100644
--- a/tools/perf/pmu-events/jevents.c
+++ b/tools/perf/pmu-events/jevents.c
@@ -203,7 +203,7 @@ static void print_events_table_prefix(FILE *fp, const char 
*tblname)
 }
 
 static int print_events_table_entry(void *data, char *name, char *event,
-                                   char *desc, char *long_desc)
+                                   char *desc, char *long_desc, char *topic)
 {
        FILE *outfp = data;
        /*
@@ -217,6 +217,8 @@ static int print_events_table_entry(void *data, char *name, 
char *event,
        fprintf(outfp, "\t.desc = \"%s\",\n", desc);
        if (long_desc && long_desc[0])
                fprintf(outfp, "\t.long_desc = \"%s\",\n", long_desc);
+       if (topic)
+               fprintf(outfp, "\t.topic = \"%s\",\n", topic);
 
        fprintf(outfp, "},\n");
 
@@ -238,7 +240,7 @@ static void print_events_table_suffix(FILE *outfp)
 /* Call func with each event in the json file */
 int json_events(const char *fn,
          int (*func)(void *data, char *name, char *event, char *desc,
-                     char *long_desc),
+                     char *long_desc, char *topic),
          void *data)
 {
        int err = -EIO;
@@ -259,6 +261,7 @@ int json_events(const char *fn,
                char *event = NULL, *desc = NULL, *name = NULL;
                char *long_desc = NULL;
                char *extra_desc = NULL;
+               char *topic = NULL;
                struct msrmap *msr = NULL;
                jsmntok_t *msrval = NULL;
                jsmntok_t *precise = NULL;
@@ -298,6 +301,8 @@ int json_events(const char *fn,
                                   !json_streq(map, val, "null")) {
                                addfield(map, &extra_desc, ". ",
                                        " Spec update: ", val);
+                       } else if (json_streq(map, field, "Topic")) {
+                               addfield(map, &topic, "", "", val);
                        } else if (json_streq(map, field, "Data_LA") && nz) {
                                addfield(map, &extra_desc, ". ",
                                        " Supports address when precise",
@@ -321,12 +326,13 @@ int json_events(const char *fn,
                        addfield(map, &event, ",", msr->pname, msrval);
                fixname(name);
 
-               err = func(data, name, event, desc, long_desc);
+               err = func(data, name, event, desc, long_desc, topic);
                free(event);
                free(desc);
                free(name);
                free(long_desc);
                free(extra_desc);
+               free(topic);
                if (err)
                        break;
                tok += j;
diff --git a/tools/perf/pmu-events/jevents.h b/tools/perf/pmu-events/jevents.h
index b0eb274..9ffcb89 100644
--- a/tools/perf/pmu-events/jevents.h
+++ b/tools/perf/pmu-events/jevents.h
@@ -3,7 +3,7 @@
 
 int json_events(const char *fn,
                int (*func)(void *data, char *name, char *event, char *desc,
-                               char *long_desc),
+                               char *long_desc, char *topic),
                void *data);
 char *get_cpu_str(void);
 
diff --git a/tools/perf/pmu-events/pmu-events.h 
b/tools/perf/pmu-events/pmu-events.h
index 711f049..6b69f4b 100644
--- a/tools/perf/pmu-events/pmu-events.h
+++ b/tools/perf/pmu-events/pmu-events.h
@@ -9,6 +9,7 @@ struct pmu_event {
        const char *event;
        const char *desc;
        const char *long_desc;
+       const char *topic;
 };
 
 /*
-- 
2.5.3

Reply via email to