lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 4 Oct 2016 01:16:07 -0700 From: tip-bot for Sukadev Bhattiprolu <tipbot@...or.com> To: linux-tip-commits@...r.kernel.org Cc: mingo@...nel.org, hpa@...or.com, jolsa@...hat.com, sukadev@...ux.vnet.ibm.com, acme@...hat.com, ak@...ux.intel.com, tglx@...utronix.de, maddy@...ux.vnet.ibm.com, linux-kernel@...r.kernel.org, peterz@...radead.org Subject: [tip:perf/urgent] perf jevents: Add support for long descriptions Commit-ID: 794ba54a8393456d503958d6217874e455b6a771 Gitweb: http://git.kernel.org/tip/794ba54a8393456d503958d6217874e455b6a771 Author: Sukadev Bhattiprolu <sukadev@...ux.vnet.ibm.com> AuthorDate: Thu, 15 Sep 2016 15:24:47 -0700 Committer: Arnaldo Carvalho de Melo <acme@...hat.com> CommitDate: Mon, 3 Oct 2016 21:35:46 -0300 perf jevents: Add support for long descriptions Implement support in jevents to parse long descriptions for events that may have them in the JSON files. A follow on patch will make this long description available to user through the 'perf list' command. Signed-off-by: Andi Kleen <ak@...ux.intel.com> Signed-off-by: Sukadev Bhattiprolu <sukadev@...ux.vnet.ibm.com> Acked-by: Ingo Molnar <mingo@...nel.org> Acked-by: Jiri Olsa <jolsa@...hat.com> Cc: Madhavan Srinivasan <maddy@...ux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@...radead.org> Cc: linuxppc-dev@...ts.ozlabs.org Link: http://lkml.kernel.org/r/1473978296-20712-11-git-send-email-sukadev@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@...hat.com> --- tools/perf/pmu-events/jevents.c | 32 ++++++++++++++++++++++++-------- tools/perf/pmu-events/jevents.h | 3 ++- tools/perf/pmu-events/pmu-events.h | 1 + 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c index c9bf9a7..13f4284 100644 --- a/tools/perf/pmu-events/jevents.c +++ b/tools/perf/pmu-events/jevents.c @@ -269,7 +269,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 *desc, char *long_desc) { struct perf_entry_data *pd = data; FILE *outfp = pd->outfp; @@ -285,6 +285,8 @@ static int print_events_table_entry(void *data, char *name, char *event, fprintf(outfp, "\t.event = \"%s\",\n", event); fprintf(outfp, "\t.desc = \"%s\",\n", desc); fprintf(outfp, "\t.topic = \"%s\",\n", topic); + if (long_desc && long_desc[0]) + fprintf(outfp, "\t.long_desc = \"%s\",\n", long_desc); fprintf(outfp, "},\n"); @@ -306,7 +308,8 @@ 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), + int (*func)(void *data, char *name, char *event, char *desc, + char *long_desc), void *data) { int err = -EIO; @@ -325,6 +328,8 @@ int json_events(const char *fn, tok = tokens + 1; for (i = 0; i < tokens->size; i++) { char *event = NULL, *desc = NULL, *name = NULL; + char *long_desc = NULL; + char *extra_desc = NULL; struct msrmap *msr = NULL; jsmntok_t *msrval = NULL; jsmntok_t *precise = NULL; @@ -350,6 +355,10 @@ int json_events(const char *fn, } else if (json_streq(map, field, "BriefDescription")) { addfield(map, &desc, "", "", val); fixdesc(desc); + } else if (json_streq(map, field, + "PublicDescription")) { + addfield(map, &long_desc, "", "", val); + fixdesc(long_desc); } else if (json_streq(map, field, "PEBS") && nz) { precise = val; } else if (json_streq(map, field, "MSRIndex") && nz) { @@ -358,10 +367,10 @@ int json_events(const char *fn, msrval = val; } else if (json_streq(map, field, "Errata") && !json_streq(map, val, "null")) { - addfield(map, &desc, ". ", + addfield(map, &extra_desc, ". ", " Spec update: ", val); } else if (json_streq(map, field, "Data_LA") && nz) { - addfield(map, &desc, ". ", + addfield(map, &extra_desc, ". ", " Supports address when precise", NULL); } @@ -369,19 +378,26 @@ int json_events(const char *fn, } if (precise && desc && !strstr(desc, "(Precise Event)")) { if (json_streq(map, precise, "2")) - addfield(map, &desc, " ", "(Must be precise)", - NULL); + addfield(map, &extra_desc, " ", + "(Must be precise)", NULL); else - addfield(map, &desc, " ", + addfield(map, &extra_desc, " ", "(Precise event)", NULL); } + if (desc && extra_desc) + addfield(map, &desc, " ", extra_desc, NULL); + if (long_desc && extra_desc) + addfield(map, &long_desc, " ", extra_desc, NULL); if (msr != NULL) addfield(map, &event, ",", msr->pname, msrval); fixname(name); - err = func(data, name, event, desc); + + err = func(data, name, event, desc, long_desc); free(event); free(desc); free(name); + free(long_desc); + free(extra_desc); if (err) break; tok += j; diff --git a/tools/perf/pmu-events/jevents.h b/tools/perf/pmu-events/jevents.h index 996601f..b0eb274 100644 --- a/tools/perf/pmu-events/jevents.h +++ b/tools/perf/pmu-events/jevents.h @@ -2,7 +2,8 @@ #define JEVENTS_H 1 int json_events(const char *fn, - int (*func)(void *data, char *name, char *event, char *desc), + int (*func)(void *data, char *name, char *event, char *desc, + char *long_desc), 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 70d5479..2eaef59 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 *topic; + const char *long_desc; }; /*
Powered by blists - more mailing lists