Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp272742ybg; Mon, 1 Jun 2020 00:33:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAJEH6ppzEZGJdFSrGsVTGO6Dw0pbduLgaMHg+ersiAC9ti8EibJ9YuaVHXJqFxTCmVq+W X-Received: by 2002:a05:6402:1216:: with SMTP id c22mr21207092edw.208.1590996784325; Mon, 01 Jun 2020 00:33:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590996784; cv=none; d=google.com; s=arc-20160816; b=DGbaeIMvlkySoGoG4iV99H0GlC2TdityQJcTFePd2hk2mgI7ciqdgkhVAfVf0LL9lX dzMREMmoK9sEmK/dwQmfpg+dxkNHjWowRH3zE0LKjEV40P3gdjmYdgjNZ/9XgdUemozi hryM0gcBSviRXRdnhEmuVn9WUvN25DRXw3yBXaS8tmzWhvsFWa2TGss79+LQP/PWEyZu q6GuV7Rh7/3x0q1cO2Ai4iXxNHXnwiU1/M62I/9CIfmhq2B1rQiUnhansfmkbwD+X8Hj jV8Hh25iS4vyqZg+AyC6ZBpdu7n+61O71oWiB4bK+UFDpPywgn13OnG4w3hyTed8lQdE xhsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=ZID94TU6tFG7wYH7dZo83f1hFQXBxAzEx2wLz2hNO0o=; b=sVR2tc6oJLim8rK8eP88jQrt/wzeJzYga6fzMAukwle7die4T3JM8utaqbJkPSYzJh vYJ2iZVmV9g1pPMdmbx5U2Uqzv70TjH1hx01EprYb7Mar2I9zmdEecXDypTh/PW2vwux YPkdujnZCCenqDatFll7KtOltdLbFOnB/jVIc4xmzlTKG04Dzq15Uia4JyFxUpq5LXsS y1ZRNuHXrRM8EcvyG6KMNtHxFWsbl5AsUb4UGQVdH5aerjUFoznbgKVH58fwImC0wIUh IgFASVKMeVhXbYHt+Zg/p7oDs4ku0tfms/0IsXEOg2QmAJ0JrNBCtvrQSqUYTfGBiC0i eIVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=aJvBx3mF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id mb2si162437ejb.710.2020.06.01.00.32.40; Mon, 01 Jun 2020 00:33:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=aJvBx3mF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728102AbgFAH2o (ORCPT + 99 others); Mon, 1 Jun 2020 03:28:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726011AbgFAH2o (ORCPT ); Mon, 1 Jun 2020 03:28:44 -0400 Received: from mail-io1-xd42.google.com (mail-io1-xd42.google.com [IPv6:2607:f8b0:4864:20::d42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD909C061A0E for ; Mon, 1 Jun 2020 00:28:43 -0700 (PDT) Received: by mail-io1-xd42.google.com with SMTP id j8so5847559iog.13 for ; Mon, 01 Jun 2020 00:28:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ZID94TU6tFG7wYH7dZo83f1hFQXBxAzEx2wLz2hNO0o=; b=aJvBx3mFfg34i/Er639/8hxkWjPJg0RRiGa/6C9pjKmvHeSzbO+H1kgDFCsxI1mVbo HzUebTt+ktLtfVxjE0cewIYJV3UsSsjzQX5jSo14qMxgwYuqtm6FzsH9c7N81jEKxoXe BfFiNc0PTTcTIYBGtmnY3MGyHjbjdSOyEZmCViS0Y/5q1zN0L7CAC+bWdepz8NWaK0mI uwrtRr1PqkYMRtyqqVr95yrSeUl9H8aIBDApVzTNoyQjDKdWxxNApibFdJnpdVzvDmxM SQ19+qYrsALwaqe8NjJG5UI9JPh02vERofTHOIo30UoJgA3PcefgT/dChRXino3lnPYz q2BQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ZID94TU6tFG7wYH7dZo83f1hFQXBxAzEx2wLz2hNO0o=; b=luc2EDb0hfQzbPVWj+s9Q51nNAtX/gqoEGPM9bzBTUEFK5GHlJ9hJqdHs3f5nfnck7 ICFs2RwAvvL/b9EWBXUU+0MVWq383UMdI9O2iOX6NS+fE9PPbs+k4zE+mHPz7rymAETd uCwZ2JxJbCgOle99neCf56jbIre+6TdVRN1J/htmPfjpYr674JCYW+Yx2p7mnpS6EVM1 OByZVqPvAn6+6k0cEd5vEgHdiRM0du1L/o4gbX2LmpnfqbMqXPircWuaHVcvg78h+vYg 4R/9CJQP4i6wTCp1sZHkkW9NmUf1TWuDjTf1aVFbZCTImkhAYkdzZuuwj3ZwXGSQCK3u NhVA== X-Gm-Message-State: AOAM533abg6Swfxf3MQo6++3JSOPDkPgQoEf+H7/EsaqFjqUsCnKRpQz a3qJpSPEeBEwE75SwBr/Mq04I3TNwkZnA0MgaDzrlrJUS+w= X-Received: by 2002:a05:6638:35d:: with SMTP id x29mr8710754jap.71.1590996522880; Mon, 01 Jun 2020 00:28:42 -0700 (PDT) MIME-Version: 1.0 References: <20200524224219.234847-1-jolsa@kernel.org> <20200524224219.234847-6-jolsa@kernel.org> In-Reply-To: <20200524224219.234847-6-jolsa@kernel.org> From: Ian Rogers Date: Mon, 1 Jun 2020 00:28:31 -0700 Message-ID: Subject: Re: [PATCH 05/14] perf tools: Add parse_events_fake interface To: Jiri Olsa Cc: Arnaldo Carvalho de Melo , lkml , Ingo Molnar , Namhyung Kim , Alexander Shishkin , Peter Zijlstra , Michael Petlan , Stephane Eranian , Andi Kleen Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, May 24, 2020 at 3:42 PM Jiri Olsa wrote: > > Adding parse_events_fake interface to parse events > and use fake pmu event in case pmu event is parsed. > > This way it's possible to parse events from PMUs > which are not present in the system. It's available > only for testing purposes coming in following > changes. > > Signed-off-by: Jiri Olsa Acked-by: Ian Rogers Alternatively fake_pmu could be an argument to parse_events. Thanks, Ian > --- > tools/perf/util/parse-events.c | 48 +++++++++++++++++++++++++--------- > tools/perf/util/parse-events.h | 2 ++ > 2 files changed, 37 insertions(+), 13 deletions(-) > > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 8304f9b6e6be..89239695a728 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -2082,22 +2082,15 @@ int parse_events_terms(struct list_head *terms, const char *str) > return ret; > } > > -int parse_events(struct evlist *evlist, const char *str, > - struct parse_events_error *err) > +static int parse_events_state(struct parse_events_state *parse_state, > + struct evlist *evlist, const char *str) > { > - struct parse_events_state parse_state = { > - .list = LIST_HEAD_INIT(parse_state.list), > - .idx = evlist->core.nr_entries, > - .error = err, > - .evlist = evlist, > - .stoken = PE_START_EVENTS, > - }; > int ret; > > - ret = parse_events__scanner(str, &parse_state); > + ret = parse_events__scanner(str, parse_state); > perf_pmu__parse_cleanup(); > > - if (!ret && list_empty(&parse_state.list)) { > + if (!ret && list_empty(&parse_state->list)) { > WARN_ONCE(true, "WARNING: event parser found nothing\n"); > return -1; > } > @@ -2105,12 +2098,12 @@ int parse_events(struct evlist *evlist, const char *str, > /* > * Add list to the evlist even with errors to allow callers to clean up. > */ > - perf_evlist__splice_list_tail(evlist, &parse_state.list); > + perf_evlist__splice_list_tail(evlist, &parse_state->list); > > if (!ret) { > struct evsel *last; > > - evlist->nr_groups += parse_state.nr_groups; > + evlist->nr_groups += parse_state->nr_groups; > last = evlist__last(evlist); > last->cmdline_group_boundary = true; > > @@ -2125,6 +2118,35 @@ int parse_events(struct evlist *evlist, const char *str, > return ret; > } > > +int parse_events(struct evlist *evlist, const char *str, > + struct parse_events_error *err) > +{ > + struct parse_events_state parse_state = { > + .list = LIST_HEAD_INIT(parse_state.list), > + .idx = evlist->core.nr_entries, > + .error = err, > + .evlist = evlist, > + .stoken = PE_START_EVENTS, > + }; > + > + return parse_events_state(&parse_state, evlist, str); > +} > + > +int parse_events_fake(struct evlist *evlist, const char *str, > + struct parse_events_error *err) > +{ > + struct parse_events_state parse_state = { > + .list = LIST_HEAD_INIT(parse_state.list), > + .idx = evlist->core.nr_entries, > + .error = err, > + .evlist = evlist, > + .stoken = PE_START_EVENTS, > + .fake_pmu = true, > + }; > + > + return parse_events_state(&parse_state, evlist, str); > +} > + > #define MAX_WIDTH 1000 > static int get_term_width(void) > { > diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h > index 963b0ea6c448..4a23b6cd9924 100644 > --- a/tools/perf/util/parse-events.h > +++ b/tools/perf/util/parse-events.h > @@ -34,6 +34,8 @@ int parse_events_option(const struct option *opt, const char *str, int unset); > int parse_events_option_new_evlist(const struct option *opt, const char *str, int unset); > int parse_events(struct evlist *evlist, const char *str, > struct parse_events_error *error); > +int parse_events_fake(struct evlist *evlist, const char *str, > + struct parse_events_error *error); > int parse_events_terms(struct list_head *terms, const char *str); > int parse_filter(const struct option *opt, const char *str, int unset); > int exclude_perf(const struct option *opt, const char *arg, int unset); > -- > 2.25.4 >