From patchwork Sat Jun 9 09:05:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Antipov X-Patchwork-Id: 9178 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id AD59123E56 for ; Sat, 9 Jun 2012 09:03:50 +0000 (UTC) Received: from mail-ob0-f180.google.com (mail-ob0-f180.google.com [209.85.214.180]) by fiordland.canonical.com (Postfix) with ESMTP id 500A6A18022 for ; Sat, 9 Jun 2012 09:03:50 +0000 (UTC) Received: by obbun3 with SMTP id un3so4173161obb.11 for ; Sat, 09 Jun 2012 02:03:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:from:to:cc :subject:date:message-id:x-mailer:x-gm-message-state; bh=GV+2vz2LvshiaLDQvPo0N0APK+HjYBOqWLx9q86tit0=; b=DOPUpP7asgzKpanFr0STGm6H8kUOC8SKHnr3+2/Od/W+o2LzOnBCDz+V+9WAASEspq uxDX+hi1ClckbA5JnvONrt+77hyjLkmzHtNfja3OBU2X2WHngGroJKpIUA6Fmw4Yc3Cy p3KYiP08pr5JiL7v3oWbUk1Ilp+TxXvmUUb8bx7QoiauySaMi+fhnvXVQ68j6L+FHgII ABr1tn1iRIyiWmoTKbE2H7D5VhGUP8TBqUWj3xwStxrk1MYwR9CXuQ1B/pDV18OBcSTk a0fi3klhGSgytbp767+b0VrjUv82/wDtB2yD0nZ7ZxsCXQ58ck/0P3i92Zk49fpx/i5x GJoQ== Received: by 10.50.163.99 with SMTP id yh3mr3748359igb.53.1339232629560; Sat, 09 Jun 2012 02:03:49 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.231.24.148 with SMTP id v20csp3685ibb; Sat, 9 Jun 2012 02:03:48 -0700 (PDT) Received: by 10.152.103.11 with SMTP id fs11mr11125964lab.23.1339232627639; Sat, 09 Jun 2012 02:03:47 -0700 (PDT) Received: from mail-lpp01m010-f50.google.com (mail-lpp01m010-f50.google.com [209.85.215.50]) by mx.google.com with ESMTPS id v7si9187064lak.55.2012.06.09.02.03.46 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 09 Jun 2012 02:03:47 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.215.50 is neither permitted nor denied by best guess record for domain of dmitry.antipov@linaro.org) client-ip=209.85.215.50; Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.215.50 is neither permitted nor denied by best guess record for domain of dmitry.antipov@linaro.org) smtp.mail=dmitry.antipov@linaro.org Received: by lahm15 with SMTP id m15so2305549lah.37 for ; Sat, 09 Jun 2012 02:03:46 -0700 (PDT) Received: by 10.152.109.166 with SMTP id ht6mr11262216lab.46.1339232626123; Sat, 09 Jun 2012 02:03:46 -0700 (PDT) Received: from localhost.localdomain ([78.153.153.8]) by mx.google.com with ESMTPS id hm7sm13717432lab.12.2012.06.09.02.03.44 (version=SSLv3 cipher=OTHER); Sat, 09 Jun 2012 02:03:45 -0700 (PDT) From: Dmitry Antipov To: Arnaldo Carvalho de Melo , Ingo Molnar , Paul Mackerras , Peter Zijlstra Cc: linux-kernel@vger.kernel.org, linaro-dev@lists.linaro.org, patches@linaro.org, Dmitry Antipov Subject: [PATCH] perf sched replay: fix event lookup Date: Sat, 9 Jun 2012 13:05:58 +0400 Message-Id: <1339232758-920-1-git-send-email-dmitry.antipov@linaro.org> X-Mailer: git-send-email 1.7.7.6 X-Gm-Message-State: ALoCoQlTAfcPmVv8ETuyK1yJX+hG9/cpfLk9Ei5O8WQUodM5R3oRQPsVkiBZ1NfFU9NRqU0jLxMT Use new function trace_find_event_by_name to lookup events before looking through /sys files. This helps 'perf sched replay' to map event names to IDs correctly when processing perf.data recorded on another machine. Signed-off-by: Dmitry Antipov --- tools/perf/util/evlist.c | 18 ++++++++++++++++-- tools/perf/util/trace-event-parse.c | 4 ++++ tools/perf/util/trace-event.h | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 4ac5f5a..7ebb9c5 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -17,6 +17,7 @@ #include #include "parse-events.h" +#include "trace-event.h" #include @@ -231,12 +232,25 @@ int perf_evlist__set_tracepoints_handlers(struct perf_evlist *evlist, const struct perf_evsel_str_handler *assocs, size_t nr_assocs) { + struct event_format *event; struct perf_evsel *evsel; + char *p, *sys, *name; int err; - size_t i; + size_t i, off; for (i = 0; i < nr_assocs; i++) { - err = trace_event__id(assocs[i].name); + err = -ENOENT; + p = strchr(assocs[i].name, ':'); + if (!p) + goto out; + off = p - assocs[i].name; + sys = malloc(off + 1); + memcpy(sys, assocs[i].name, off); + sys[off] = '\0'; + name = p + 1; + event = trace_find_event_by_name(sys, name); + err = event ? event->id : trace_event__id(assocs[i].name); + free(sys); if (err < 0) goto out; diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index df2fddb..44cbb40 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c @@ -176,6 +176,10 @@ struct event_format *trace_find_event(int type) return pevent_find_event(pevent, type); } +struct event_format *trace_find_event_by_name(const char *sys, const char *name) +{ + return pevent_find_event_by_name(pevent, sys, name); +} void print_trace_event(int cpu, void *data, int size) { diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h index 639852a..66f83a0 100644 --- a/tools/perf/util/trace-event.h +++ b/tools/perf/util/trace-event.h @@ -40,6 +40,7 @@ int parse_event_file(char *buf, unsigned long size, char *sys); struct pevent_record *trace_peek_data(int cpu); struct event_format *trace_find_event(int type); +struct event_format *trace_find_event_by_name(const char *sys, const char *name); unsigned long long raw_field_value(struct event_format *event, const char *name, void *data);