From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965158AbdACPLc (ORCPT ); Tue, 3 Jan 2017 10:11:32 -0500 Received: from mga07.intel.com ([134.134.136.100]:64677 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757310AbdACPIk (ORCPT ); Tue, 3 Jan 2017 10:08:40 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,455,1477983600"; d="scan'208";a="48814582" From: Andi Kleen To: acme@kernel.org Cc: jolsa@kernel.org, linux-kernel@vger.kernel.org, mingo@kernel.org, Andi Kleen Subject: [PATCH 02/11] perf, tools: Parse eventcode as number in jevents Date: Tue, 3 Jan 2017 07:08:24 -0800 Message-Id: <20170103150833.6694-3-andi@firstfloor.org> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170103150833.6694-1-andi@firstfloor.org> References: <20170103150833.6694-1-andi@firstfloor.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andi Kleen The next patch needs to modify event code. Previously eventcode was just passed through as a string. Now parse it as a number. Signed-off-by: Andi Kleen --- tools/perf/pmu-events/jevents.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/jevents.c b/tools/perf/pmu-events/jevents.c index 41611d7f9873..ee5eeeaed378 100644 --- a/tools/perf/pmu-events/jevents.c +++ b/tools/perf/pmu-events/jevents.c @@ -135,7 +135,6 @@ static struct field { const char *field; const char *kernel; } fields[] = { - { "EventCode", "event=" }, { "UMask", "umask=" }, { "CounterMask", "cmask=" }, { "Invert", "inv=" }, @@ -164,6 +163,10 @@ static int match_field(char *map, jsmntok_t *field, int nz, for (f = fields; f->field; f++) if (json_streq(map, field, f->field) && nz) { + /* Handle all variations of 0 encounted in JSON */ + if (json_streq(map, val, "0x00") || + json_streq(map, val, "0x0")) + return 1; cut_comma(map, &newval); addfield(map, event, ",", f->kernel, &newval); return 1; @@ -343,6 +346,7 @@ int json_events(const char *fn, jsmntok_t *tokens, *tok; int i, j, len; char *map; + char buf[128]; if (!fn) return -ENOENT; @@ -356,6 +360,7 @@ int json_events(const char *fn, char *event = NULL, *desc = NULL, *name = NULL; char *long_desc = NULL; char *extra_desc = NULL; + unsigned long long eventcode = 0; struct msrmap *msr = NULL; jsmntok_t *msrval = NULL; jsmntok_t *precise = NULL; @@ -376,6 +381,11 @@ int json_events(const char *fn, nz = !json_streq(map, val, "0"); if (match_field(map, field, nz, &event, val)) { /* ok */ + } else if (json_streq(map, field, "EventCode")) { + char *code = NULL; + addfield(map, &code, "", "", val); + eventcode |= strtoul(code, NULL, 0); + free(code); } else if (json_streq(map, field, "EventName")) { addfield(map, &name, "", "", val); } else if (json_streq(map, field, "BriefDescription")) { @@ -410,6 +420,8 @@ int json_events(const char *fn, addfield(map, &extra_desc, " ", "(Precise event)", NULL); } + snprintf(buf, sizeof buf, "event=%#llx", eventcode); + addfield(map, &event, ",", buf, NULL); if (desc && extra_desc) addfield(map, &desc, " ", extra_desc, NULL); if (long_desc && extra_desc) -- 2.9.3