Received: by 2002:a25:2c96:0:0:0:0:0 with SMTP id s144csp613894ybs; Sun, 24 May 2020 15:46:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwYYmNtC1eUmFwvKCRLi7f2eDuk+0OiIrkvIwvuqmBNx+gM6xzq3t6nf/qWEiyfAlRFBCHR X-Received: by 2002:a50:d54f:: with SMTP id f15mr13292784edj.37.1590360373639; Sun, 24 May 2020 15:46:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590360373; cv=none; d=google.com; s=arc-20160816; b=KJvUPuVWC9uUNycV5K1/W2MAqNHxwad5bSPj4n/8/cxrHcviuUFCaUMOcJ/jd0qXTj Wm2qKY5b4c38irmVQ6vSDxi2QAM/nGSQiQz/kW0sdMcOSK6V102y5eKjArqkPLfjSg81 ejdV2AI20LkfcXTLAn5kBRYCXfweCqpaW1slFPebZNm5fNcRU0C5UCJtxTul0WYVUDdV 5NopQVRerQbAetglYkdbBElb2QMduwFylwn8ylDOQhGC1TgGuIH5hB82ylrWA5yMf3Qh i9FHWKXUnN6yRZpJpKHhcMAiJlCHXqVSDWfikTDO4WDRUbl58UJUC+BYr1mg8PESMpoq jj/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qJHkeIAg3mJgMYM6q6o4XiHqJX7S1wPEY9XQc5JrFuc=; b=eEZJ31IvilMDgwuWIoyAufbR/hdaTdZ3BQflNkzMklM5oZv0karCtIlCMzTwSevM8O 1M37XJBzVgFMAp7QumF9YjUbxaP8VhJIVJ2vx5j/0GcyQGdezsW+Yu1JGv1yLFlpP7bS uPnjZS/whdRohaHTh5dxX9MswV2Odd2cekLR9QOGjYxEcPDugdJS2+MvaZ60el3t798A 0qgGYwt+bx9I0KzQIKEwZEHLgYv16TDxAkWMO2oVkj805eZzm4uXn1sDMfohpZ02/MpB cMOEzYhXa0wCXR57ZRbz97rSl8LL0W4nSD137mbb5qpg0HUCKasjr9lbr+fXegkc/3oO pyZg== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dr8si10434876ejc.593.2020.05.24.15.45.51; Sun, 24 May 2020 15:46:13 -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; 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=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388568AbgEXWmt convert rfc822-to-8bit (ORCPT + 99 others); Sun, 24 May 2020 18:42:49 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:27379 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388289AbgEXWms (ORCPT ); Sun, 24 May 2020 18:42:48 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-271-zWBnyYi6MyecgeZlY0V42g-1; Sun, 24 May 2020 18:42:41 -0400 X-MC-Unique: zWBnyYi6MyecgeZlY0V42g-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id A9B7D460; Sun, 24 May 2020 22:42:39 +0000 (UTC) Received: from krava.redhat.com (unknown [10.40.192.57]) by smtp.corp.redhat.com (Postfix) with ESMTP id 593AC5D788; Sun, 24 May 2020 22:42:37 +0000 (UTC) From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: lkml , Ingo Molnar , Namhyung Kim , Alexander Shishkin , Peter Zijlstra , Michael Petlan , Ian Rogers , Stephane Eranian , Andi Kleen Subject: [PATCH 05/14] perf tools: Add parse_events_fake interface Date: Mon, 25 May 2020 00:42:10 +0200 Message-Id: <20200524224219.234847-6-jolsa@kernel.org> In-Reply-To: <20200524224219.234847-1-jolsa@kernel.org> References: <20200524224219.234847-1-jolsa@kernel.org> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 4 X-Mimecast-Originator: kernel.org Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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