Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp10606ybg; Tue, 2 Jun 2020 14:50:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxd09KpmRZ2/s+y34O8rjjQr0DBjas69FtHW8lEtAt5/gC593THXqhIsUrZ5wVqe6AmoW3c X-Received: by 2002:aa7:c541:: with SMTP id s1mr16111839edr.167.1591134623491; Tue, 02 Jun 2020 14:50:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591134623; cv=none; d=google.com; s=arc-20160816; b=ZT9iJePe0mq/4I2o+yl61C625P6upfKGzMPSv2l3Mubm52xFkce63RYUp+2jw4CCnn aK3y0WFsK4nrhGjwqH+xP/rLbjnl1kkk/S3vMgJVn8gDWkDf3aiiIkGKFJdtoVNSA65Z 1I+CYDMnaLZ9ygyt6LRKdAjRjyH3jY3GCzg1yx1TflwnuZKTw/3hbbtmOaNJl/Gm2qJ0 yXe3jHkUdnLvH9/bFd3B2JT0faqIHGh7dsW/ZuQNClsjeIEqy97GKRNwhnnS57R3jpuD c4QZMDipLhCBOpMgfCNxzp8WwH84vOPVSNYRIZuHkSkYXKKz+cPCyQz6tUJfcBbdzZO8 k/OA== 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=nxYEYwnYSXoUs1z9kQIx4qjgzREAc35gHf8MdJqABqI=; b=kpc1cJGjjeLtuRu4JRokxis4wmXLj1P1qM0RIMyyKg8zIKegRMsNFb7Rr4ddiFJWBv zQ7MKNzm8CkHJjcC0WOYvBihiXGTXbYMhL3HPwRDLFVKkkUOp6X2s5gBFYxDezB6yBti FvM+OY1zlti3vBAIWHMBBLJ71wOeElb9yarD2iLnVZ+jc/kQDHq17UDPfwjF+BPkGHVn atnP+m4MXdyzkqCFAv6ZxWNKmaA7on27iY/LxupMr2kyf8Grn/7RzY/JIE2FbEX2/teP G7ZyhjcvVNObIMSMX4KDXeeLfYVUiKpre1GP8uH9qalprH2ZF+G+dPD3qMkqFlDeubg4 LTJA== 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 gy17si85859ejb.244.2020.06.02.14.49.59; Tue, 02 Jun 2020 14:50:23 -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 S1728344AbgFBVsF convert rfc822-to-8bit (ORCPT + 99 others); Tue, 2 Jun 2020 17:48:05 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:32765 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726130AbgFBVsB (ORCPT ); Tue, 2 Jun 2020 17:48:01 -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-280-tKzMLSmkPciba7PPjO97iw-1; Tue, 02 Jun 2020 17:47:53 -0400 X-MC-Unique: tKzMLSmkPciba7PPjO97iw-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 839891083E80; Tue, 2 Jun 2020 21:47:51 +0000 (UTC) Received: from krava.redhat.com (unknown [10.40.192.62]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9EB571BCBE; Tue, 2 Jun 2020 21:47:48 +0000 (UTC) From: Jiri Olsa To: Arnaldo Carvalho de Melo Cc: Ian Rogers , lkml , Ingo Molnar , Namhyung Kim , Alexander Shishkin , Peter Zijlstra , Michael Petlan , Stephane Eranian , Andi Kleen Subject: [PATCH 02/13] perf tools: Add fake_pmu bool to parse_events interface Date: Tue, 2 Jun 2020 23:47:30 +0200 Message-Id: <20200602214741.1218986-3-jolsa@kernel.org> In-Reply-To: <20200602214741.1218986-1-jolsa@kernel.org> References: <20200602214741.1218986-1-jolsa@kernel.org> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 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 fake_pmu bool argument parse_events 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, so all the current users set fake_pmu argument as false. Acked-by: Ian Rogers Signed-off-by: Jiri Olsa --- tools/perf/arch/arm/util/cs-etm.c | 2 +- tools/perf/arch/arm64/util/arm-spe.c | 2 +- tools/perf/arch/powerpc/util/kvm-stat.c | 2 +- tools/perf/arch/x86/tests/intel-cqm.c | 2 +- tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/arch/x86/util/intel-bts.c | 2 +- tools/perf/arch/x86/util/intel-pt.c | 6 +++--- tools/perf/builtin-stat.c | 8 ++++---- tools/perf/builtin-trace.c | 4 ++-- tools/perf/tests/backward-ring-buffer.c | 3 ++- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/event-times.c | 2 +- tools/perf/tests/evsel-roundtrip-name.c | 4 ++-- tools/perf/tests/hists_cumulate.c | 2 +- tools/perf/tests/hists_filter.c | 4 ++-- tools/perf/tests/hists_link.c | 4 ++-- tools/perf/tests/hists_output.c | 2 +- tools/perf/tests/keep-tracking.c | 4 ++-- tools/perf/tests/parse-events.c | 2 +- tools/perf/tests/pmu-events.c | 2 +- tools/perf/tests/switch-tracking.c | 8 ++++---- tools/perf/util/bpf-loader.c | 2 +- tools/perf/util/metricgroup.c | 2 +- tools/perf/util/parse-events.c | 15 ++++++++------- tools/perf/util/parse-events.h | 2 +- tools/perf/util/perf_api_probe.c | 2 +- tools/perf/util/record.c | 2 +- 27 files changed, 48 insertions(+), 46 deletions(-) diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c index cea5e33d61d2..c99a6528f45c 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -415,7 +415,7 @@ static int cs_etm_recording_options(struct auxtrace_record *itr, if (opts->full_auxtrace) { struct evsel *tracking_evsel; - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) goto out; diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/util/arm-spe.c index e3593063b3d1..34d8416855d5 100644 --- a/tools/perf/arch/arm64/util/arm-spe.c +++ b/tools/perf/arch/arm64/util/arm-spe.c @@ -125,7 +125,7 @@ static int arm_spe_recording_options(struct auxtrace_record *itr, evsel__set_sample_bit(arm_spe_evsel, TID); /* Add dummy event to keep tracking */ - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) return err; diff --git a/tools/perf/arch/powerpc/util/kvm-stat.c b/tools/perf/arch/powerpc/util/kvm-stat.c index eed9e5a42935..396f6bff44db 100644 --- a/tools/perf/arch/powerpc/util/kvm-stat.c +++ b/tools/perf/arch/powerpc/util/kvm-stat.c @@ -114,7 +114,7 @@ static int is_tracepoint_available(const char *str, struct evlist *evlist) int ret; bzero(&err, sizeof(err)); - ret = parse_events(evlist, str, &err); + ret = parse_events(evlist, str, &err, false); if (err.str) parse_events_print_error(&err, "tracepoint"); return ret; diff --git a/tools/perf/arch/x86/tests/intel-cqm.c b/tools/perf/arch/x86/tests/intel-cqm.c index 3ec562a2aaba..a672cc2ca02c 100644 --- a/tools/perf/arch/x86/tests/intel-cqm.c +++ b/tools/perf/arch/x86/tests/intel-cqm.c @@ -56,7 +56,7 @@ int test__intel_cqm_count_nmi_context(struct test *test __maybe_unused, int subt return TEST_FAIL; } - ret = parse_events(evlist, "intel_cqm/llc_occupancy/", NULL); + ret = parse_events(evlist, "intel_cqm/llc_occupancy/", NULL, false); if (ret) { pr_debug("parse_events failed, is \"intel_cqm/llc_occupancy/\" available?\n"); err = TEST_SKIP; diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c b/tools/perf/arch/x86/tests/perf-time-to-tsc.c index 026d32ed078e..3d821e07119e 100644 --- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c +++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c @@ -80,7 +80,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe perf_evlist__set_maps(&evlist->core, cpus, threads); - CHECK__(parse_events(evlist, "cycles:u", NULL)); + CHECK__(parse_events(evlist, "cycles:u", NULL, false)); perf_evlist__config(evlist, &opts, NULL); diff --git a/tools/perf/arch/x86/util/intel-bts.c b/tools/perf/arch/x86/util/intel-bts.c index 0dc09b5809c1..2ac433fd542b 100644 --- a/tools/perf/arch/x86/util/intel-bts.c +++ b/tools/perf/arch/x86/util/intel-bts.c @@ -232,7 +232,7 @@ static int intel_bts_recording_options(struct auxtrace_record *itr, struct evsel *tracking_evsel; int err; - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) return err; diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c index 839ef52c1ac2..160fa9b135b4 100644 --- a/tools/perf/arch/x86/util/intel-pt.c +++ b/tools/perf/arch/x86/util/intel-pt.c @@ -419,7 +419,7 @@ static int intel_pt_track_switches(struct evlist *evlist) if (!perf_evlist__can_select_event(evlist, sched_switch)) return -EPERM; - err = parse_events(evlist, sched_switch, NULL); + err = parse_events(evlist, sched_switch, NULL, false); if (err) { pr_debug2("%s: failed to parse %s, error %d\n", __func__, sched_switch, err); @@ -796,7 +796,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, if (!cpu_wide && perf_can_record_cpu_wide()) { struct evsel *switch_evsel; - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) return err; @@ -854,7 +854,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, if (opts->full_auxtrace) { struct evsel *tracking_evsel; - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) return err; diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index 9be020e0098a..01f8aed735be 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -1586,11 +1586,11 @@ static int add_default_attributes(void) if (pmu_have_event("cpu", "cycles-ct") && pmu_have_event("cpu", "el-start")) err = parse_events(evsel_list, transaction_attrs, - &errinfo); + &errinfo, false); else err = parse_events(evsel_list, transaction_limited_attrs, - &errinfo); + &errinfo, false); if (err) { fprintf(stderr, "Cannot set up transaction events\n"); parse_events_print_error(&errinfo, transaction_attrs); @@ -1619,7 +1619,7 @@ static int add_default_attributes(void) pmu_have_event("msr", "smi")) { if (!force_metric_only) stat_config.metric_only = true; - err = parse_events(evsel_list, smi_cost_attrs, &errinfo); + err = parse_events(evsel_list, smi_cost_attrs, &errinfo, false); } else { fprintf(stderr, "To measure SMI cost, it needs " "msr/aperf/, msr/smi/ and cpu/cycles/ support\n"); @@ -1659,7 +1659,7 @@ static int add_default_attributes(void) if (topdown_attrs[0] && str) { if (warn) arch_topdown_group_warn(); - err = parse_events(evsel_list, str, &errinfo); + err = parse_events(evsel_list, str, &errinfo, false); if (err) { fprintf(stderr, "Cannot set up top down events %s: %d\n", diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 4cbb64edc998..47585e785f7e 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -3044,7 +3044,7 @@ static bool evlist__add_vfs_getname(struct evlist *evlist) int ret; bzero(&err, sizeof(err)); - ret = parse_events(evlist, "probe:vfs_getname*", &err); + ret = parse_events(evlist, "probe:vfs_getname*", &err, false); if (ret) { free(err.str); free(err.help); @@ -4879,7 +4879,7 @@ int cmd_trace(int argc, const char **argv) struct parse_events_error parse_err; bzero(&parse_err, sizeof(parse_err)); - err = parse_events(trace.evlist, trace.perfconfig_events, &parse_err); + err = parse_events(trace.evlist, trace.perfconfig_events, &parse_err, false); if (err) { parse_events_print_error(&parse_err, trace.perfconfig_events); goto out; diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 15cea518f5ad..d08be4576e61 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c @@ -120,7 +120,8 @@ int test__backward_ring_buffer(struct test *test __maybe_unused, int subtest __m * Set backward bit, ring buffer should be writing from end. Record * it in aux evlist */ - err = parse_events(evlist, "syscalls:sys_enter_prctl/overwrite/", &parse_error); + err = parse_events(evlist, "syscalls:sys_enter_prctl/overwrite/", + &parse_error, false); if (err) { pr_debug("Failed to parse tracepoint event, try use root\n"); ret = TEST_SKIP; diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c index 6fe221d31f07..a87a0ffe3705 100644 --- a/tools/perf/tests/code-reading.c +++ b/tools/perf/tests/code-reading.c @@ -645,7 +645,7 @@ static int do_test_code_reading(bool try_kcore) str = do_determine_event(excl_kernel); pr_debug("Parsing event '%s'\n", str); - ret = parse_events(evlist, str, NULL); + ret = parse_events(evlist, str, NULL, false); if (ret < 0) { pr_debug("parse_events failed\n"); goto out_put; diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c index db68894a6f40..15773d384747 100644 --- a/tools/perf/tests/event-times.c +++ b/tools/perf/tests/event-times.c @@ -174,7 +174,7 @@ static int test_times(int (attach)(struct evlist *), goto out_err; } - err = parse_events(evlist, "cpu-clock:u", NULL); + err = parse_events(evlist, "cpu-clock:u", NULL, false); if (err) { pr_debug("failed to parse event cpu-clock:u\n"); goto out_err; diff --git a/tools/perf/tests/evsel-roundtrip-name.c b/tools/perf/tests/evsel-roundtrip-name.c index f7f3e5b4c180..9154e068539e 100644 --- a/tools/perf/tests/evsel-roundtrip-name.c +++ b/tools/perf/tests/evsel-roundtrip-name.c @@ -25,7 +25,7 @@ static int perf_evsel__roundtrip_cache_name_test(void) for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) { __evsel__hw_cache_type_op_res_name(type, op, i, name, sizeof(name)); - err = parse_events(evlist, name, NULL); + err = parse_events(evlist, name, NULL, false); if (err) ret = err; } @@ -72,7 +72,7 @@ static int __perf_evsel__name_array_test(const char *names[], int nr_names) return -ENOMEM; for (i = 0; i < nr_names; ++i) { - err = parse_events(evlist, names[i], NULL); + err = parse_events(evlist, names[i], NULL, false); if (err) { pr_debug("failed to parse event '%s', err %d\n", names[i], err); diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cumulate.c index 3f2e1a581247..1ad9052cbdd5 100644 --- a/tools/perf/tests/hists_cumulate.c +++ b/tools/perf/tests/hists_cumulate.c @@ -706,7 +706,7 @@ int test__hists_cumulate(struct test *test __maybe_unused, int subtest __maybe_u TEST_ASSERT_VAL("No memory", evlist); - err = parse_events(evlist, "cpu-clock", NULL); + err = parse_events(evlist, "cpu-clock", NULL, false); if (err) goto out; err = TEST_FAIL; diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filter.c index 123e07d35b55..49828b40bcad 100644 --- a/tools/perf/tests/hists_filter.c +++ b/tools/perf/tests/hists_filter.c @@ -111,10 +111,10 @@ int test__hists_filter(struct test *test __maybe_unused, int subtest __maybe_unu TEST_ASSERT_VAL("No memory", evlist); - err = parse_events(evlist, "cpu-clock", NULL); + err = parse_events(evlist, "cpu-clock", NULL, false); if (err) goto out; - err = parse_events(evlist, "task-clock", NULL); + err = parse_events(evlist, "task-clock", NULL, false); if (err) goto out; err = TEST_FAIL; diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c index a024d3f3a412..1760d0defdfe 100644 --- a/tools/perf/tests/hists_link.c +++ b/tools/perf/tests/hists_link.c @@ -276,10 +276,10 @@ int test__hists_link(struct test *test __maybe_unused, int subtest __maybe_unuse if (evlist == NULL) return -ENOMEM; - err = parse_events(evlist, "cpu-clock", NULL); + err = parse_events(evlist, "cpu-clock", NULL, false); if (err) goto out; - err = parse_events(evlist, "task-clock", NULL); + err = parse_events(evlist, "task-clock", NULL, false); if (err) goto out; diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_output.c index 8973f35df604..82773e977ba3 100644 --- a/tools/perf/tests/hists_output.c +++ b/tools/perf/tests/hists_output.c @@ -593,7 +593,7 @@ int test__hists_output(struct test *test __maybe_unused, int subtest __maybe_unu TEST_ASSERT_VAL("No memory", evlist); - err = parse_events(evlist, "cpu-clock", NULL); + err = parse_events(evlist, "cpu-clock", NULL, false); if (err) goto out; err = TEST_FAIL; diff --git a/tools/perf/tests/keep-tracking.c b/tools/perf/tests/keep-tracking.c index 50a0c9fcde7d..d0334a2e1a8e 100644 --- a/tools/perf/tests/keep-tracking.c +++ b/tools/perf/tests/keep-tracking.c @@ -89,8 +89,8 @@ int test__keep_tracking(struct test *test __maybe_unused, int subtest __maybe_un perf_evlist__set_maps(&evlist->core, cpus, threads); - CHECK__(parse_events(evlist, "dummy:u", NULL)); - CHECK__(parse_events(evlist, "cycles:u", NULL)); + CHECK__(parse_events(evlist, "dummy:u", NULL, false)); + CHECK__(parse_events(evlist, "cycles:u", NULL, false)); perf_evlist__config(evlist, &opts, NULL); diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 895188b63f96..0f6c6b246677 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -1797,7 +1797,7 @@ static int test_event(struct evlist_test *e) if (evlist == NULL) return -ENOMEM; - ret = parse_events(evlist, e->name, &err); + ret = parse_events(evlist, e->name, &err, false); if (ret) { pr_debug("failed to parse event '%s', err %d, str '%s'\n", e->name, ret, err.str); diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index ab64b4a4e284..894282be073f 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -402,7 +402,7 @@ static int check_parse_id(const char *id, bool same_cpu, struct pmu_event *pe) evlist = evlist__new(); memset(&error, 0, sizeof(error)); - ret = parse_events(evlist, id, &error); + ret = parse_events(evlist, id, &error, false); if (ret && same_cpu) { pr_warning("Parse event failed metric '%s' id '%s' expr '%s'\n", pe->metric_name, id, pe->metric_expr); diff --git a/tools/perf/tests/switch-tracking.c b/tools/perf/tests/switch-tracking.c index db5e1f70053a..2628de39d82d 100644 --- a/tools/perf/tests/switch-tracking.c +++ b/tools/perf/tests/switch-tracking.c @@ -362,7 +362,7 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_ perf_evlist__set_maps(&evlist->core, cpus, threads); /* First event */ - err = parse_events(evlist, "cpu-clock:u", NULL); + err = parse_events(evlist, "cpu-clock:u", NULL, false); if (err) { pr_debug("Failed to parse event dummy:u\n"); goto out_err; @@ -371,7 +371,7 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_ cpu_clocks_evsel = evlist__last(evlist); /* Second event */ - err = parse_events(evlist, "cycles:u", NULL); + err = parse_events(evlist, "cycles:u", NULL, false); if (err) { pr_debug("Failed to parse event cycles:u\n"); goto out_err; @@ -386,7 +386,7 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_ goto out; } - err = parse_events(evlist, sched_switch, NULL); + err = parse_events(evlist, sched_switch, NULL, false); if (err) { pr_debug("Failed to parse event %s\n", sched_switch); goto out_err; @@ -416,7 +416,7 @@ int test__switch_tracking(struct test *test __maybe_unused, int subtest __maybe_ evsel__set_sample_bit(cycles_evsel, TIME); /* Fourth event */ - err = parse_events(evlist, "dummy:u", NULL); + err = parse_events(evlist, "dummy:u", NULL, false); if (err) { pr_debug("Failed to parse event dummy:u\n"); goto out_err; diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index 2feb751516ab..98307b14def1 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c @@ -1560,7 +1560,7 @@ struct evsel *bpf__setup_output_event(struct evlist *evlist, const char *name) if (asprintf(&event_definition, "bpf-output/no-inherit=1,name=%s/", name) < 0) return ERR_PTR(-ENOMEM); - err = parse_events(evlist, event_definition, NULL); + err = parse_events(evlist, event_definition, NULL, false); free(event_definition); if (err) { diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 9e21aa767e41..9a90afb4428c 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -729,7 +729,7 @@ int metricgroup__parse_groups(const struct option *opt, return ret; pr_debug("adding %s\n", extra_events.buf); bzero(&parse_error, sizeof(parse_error)); - ret = parse_events(perf_evlist, extra_events.buf, &parse_error); + ret = parse_events(perf_evlist, extra_events.buf, &parse_error, false); if (ret) { parse_events_print_error(&parse_error, extra_events.buf); goto out; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index d521b38fa677..ec146a6f057a 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2097,14 +2097,15 @@ int parse_events_terms(struct list_head *terms, const char *str) } int parse_events(struct evlist *evlist, const char *str, - struct parse_events_error *err) + struct parse_events_error *err, bool fake_pmu) { 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, + .list = LIST_HEAD_INIT(parse_state.list), + .idx = evlist->core.nr_entries, + .error = err, + .evlist = evlist, + .stoken = PE_START_EVENTS, + .fake_pmu = fake_pmu, }; int ret; @@ -2232,7 +2233,7 @@ int parse_events_option(const struct option *opt, const char *str, int ret; bzero(&err, sizeof(err)); - ret = parse_events(evlist, str, &err); + ret = parse_events(evlist, str, &err, false); if (ret) { parse_events_print_error(&err, str); diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 9d6846bea6ab..1864b784a587 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -34,7 +34,7 @@ const char *event_type(int type); 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); + struct parse_events_error *error, bool fake_pmu); 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); diff --git a/tools/perf/util/perf_api_probe.c b/tools/perf/util/perf_api_probe.c index 1337965673d7..7657cc57f93b 100644 --- a/tools/perf/util/perf_api_probe.c +++ b/tools/perf/util/perf_api_probe.c @@ -23,7 +23,7 @@ static int perf_do_probe_api(setup_probe_fn_t fn, int cpu, const char *str) if (!evlist) return -ENOMEM; - if (parse_events(evlist, str, NULL)) + if (parse_events(evlist, str, NULL, false)) goto out_delete; evsel = evlist__first(evlist); diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c index a4cc11592f6b..bae21b43ac08 100644 --- a/tools/perf/util/record.c +++ b/tools/perf/util/record.c @@ -210,7 +210,7 @@ bool perf_evlist__can_select_event(struct evlist *evlist, const char *str) if (!temp_evlist) return false; - err = parse_events(temp_evlist, str, NULL); + err = parse_events(temp_evlist, str, NULL, false); if (err) goto out_delete; -- 2.25.4