From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 354A417C6D for ; Mon, 15 Apr 2024 06:36:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162995; cv=none; b=YjCLE2pnTq5hqruqlfVH4hA3XxcfsEfjgQ/iDNkH03l9A4/1CsTP+rZo3lclIm5PLY79l8ZkED8SH7IBhgotRYPxaHxdP3dJ3lCRwr8OoMu6PPWu4i4snB0QwxudsTPj1GM3keIJzbfMXZkWyvFayQAw/IlUzkvJKVpY1D8GRpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162995; c=relaxed/simple; bh=z8AXrLaNzb+8gvaf2At9VNLcG0t9xXxT/9GG0wDhFkQ=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=t1XZzrxrjkN5jIeDKx0SW1FQqxFhi43pqs8AcQSvcQZardKVdzAMLE/HdReLeHdpb6w09R92OTF88b6NdWoI2Gzd1Ok2F9NF5wdlSBgaImqIxhEvZLvPJX2Uh+BmmFj5LGM/04sIPcLMV8C140ItlDtEWnfwOw73Od3JsFp4GCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OTNc3jkL; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OTNc3jkL" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-615138794f5so49568527b3.2 for ; Sun, 14 Apr 2024 23:36:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713162992; x=1713767792; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=3/UXsGbRM4hk6gURXUv3cQgeMnu1X8cp+uoMKx5i54A=; b=OTNc3jkL+v+erdDSZdzg/S3AjxCAHS3Mz3hT2Vz7SHU1ioER5IVMa8pQ8w08cawmhe tVtD2yxWWPI+l2XAMd2rnJ6xzKmxF6tqDMistNs63bSMt/C9Ky1gVNVv2X92TghAuzp1 dww58Y+bopQN1QMryoSS0TU1fVmAqNC4PZUYT9BV/cXB1FUVRDUBKcMrX99kivjI8IaO oyRPJq3P1bGMfk36ReKGmbYneRy1t//HeYr1+LpEIXTgX7FbuG/Tc13D2J+FX725wDUZ gLKt1L/TJULVYDBSZJ4mjLBo2Ip98fzikjo9MiPo7/ROJ/djwa5nmZsc4kPjXQpLlSba p9Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713162992; x=1713767792; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3/UXsGbRM4hk6gURXUv3cQgeMnu1X8cp+uoMKx5i54A=; b=R57WNvn3HfRGoTH97DFKKXqhnsp6Zb1HA4lr0iFnY8E7BqSMlH4H/9GY2DV9qFJca0 uNu+UQqhdmD1cKV/mkk032RKZkCrBLsTtdR+4JwUlR4+PaXL2sYDstyrGXghiinEtgMr d048lw86PuRcESVXXsYLizdeCbq+e8r1G9Q1lsWLjYjE3p+66GxipzQb/0mrPDzbYYG9 j69mC6KTSx3xsoEkFzB3R37V/l5MLDMLi8H13DofXwQQZnzkeaYaT6UplQmuKFCJE4et 49ItvOk+WyFjTAAG0njqOcV7PtpkzPI+iTDxd7DDOI1XuF05wqEBCqeMidvWFkm4nS+N xDPw== X-Forwarded-Encrypted: i=1; AJvYcCWCOzjh7nNPQtdzVgiSNVcdC/h94FAIbykGXi/G+4q2CV5X6nOSxvVuk0GAxwSTNlu0ei7HHDHvpRKOSYehVc+bIl/gk++XQTgJvTkj X-Gm-Message-State: AOJu0YwuAhg/i9kFJn+G4QCgaRbXwr6yhQAAIW25+clfhPyKhC2cMN8H 5I/cZ+deVd3wDYVy5Qr55HVItqiah7nzZdSYcgJIbuvZxAwJYDcEM+NmfQbmD7/fQ+5Es0SaOAF X7KY/UQ== X-Google-Smtp-Source: AGHT+IEpPwiuctvi4YKU+jbWzpMd0bbjy29hbZCztwCayE2Xpwu2Te6+qRZrYddkUXa58px17V/U1JOs3MD6 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a0d:c241:0:b0:615:80c8:94eb with SMTP id e62-20020a0dc241000000b0061580c894ebmr2287735ywd.10.1713162992269; Sun, 14 Apr 2024 23:36:32 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:18 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-2-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 1/9] perf parse-events: Factor out '/.../' parsing From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Factor out the case of an event or PMU name followed by a slash based term list. This is with a view to sharing the code with new legacy hardware parsing. Use early return to reduce indentation in the code. Make parse_events_add_pmu static now it doesn't need sharing with parse-events.y. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 69 +++++++++++++++++++++++++++++++- tools/perf/util/parse-events.h | 10 +++-- tools/perf/util/parse-events.y | 73 +++------------------------------- 3 files changed, 80 insertions(+), 72 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 6f8b0fa17689..b16c75bf5580 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1385,7 +1385,7 @@ static bool config_term_percore(struct list_head *con= fig_terms) return false; } =20 -int parse_events_add_pmu(struct parse_events_state *parse_state, +static int parse_events_add_pmu(struct parse_events_state *parse_state, struct list_head *list, const char *name, const struct parse_events_terms *const_parsed_terms, bool auto_merge_stats, void *loc_) @@ -1618,6 +1618,73 @@ int parse_events_multi_pmu_add(struct parse_events_s= tate *parse_state, return ok ? 0 : -1; } =20 +int parse_events_multi_pmu_add_or_add_pmu(struct parse_events_state *parse= _state, + const char *event_or_pmu, + const struct parse_events_terms *const_parsed_terms, + struct list_head **listp, + void *loc_) +{ + char *pattern =3D NULL; + YYLTYPE *loc =3D loc_; + struct perf_pmu *pmu =3D NULL; + int ok =3D 0; + char *help; + + *listp =3D malloc(sizeof(**listp)); + if (!*listp) + return -ENOMEM; + + INIT_LIST_HEAD(*listp); + + /* Attempt to add to list assuming event_or_pmu is a PMU name. */ + if (!parse_events_add_pmu(parse_state, *listp, event_or_pmu, const_parsed= _terms, + /*auto_merge_stats=3D*/false, loc)) + return 0; + + /* Failed to add, try wildcard expansion of event_or_pmu as a PMU name. */ + if (asprintf(&pattern, "%s*", event_or_pmu) < 0) { + zfree(listp); + return -ENOMEM; + } + + while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { + const char *name =3D pmu->name; + + if (parse_events__filter_pmu(parse_state, pmu)) + continue; + + if (!strncmp(name, "uncore_", 7) && + strncmp(event_or_pmu, "uncore_", 7)) + name +=3D 7; + if (!perf_pmu__match(pattern, name, event_or_pmu) || + !perf_pmu__match(pattern, pmu->alias_name, event_or_pmu)) { + bool auto_merge_stats =3D perf_pmu__auto_merge_stats(pmu); + + if (!parse_events_add_pmu(parse_state, *listp, pmu->name, const_parsed_= terms, + auto_merge_stats, loc)) { + ok++; + parse_state->wild_card_pmus =3D true; + } + } + } + zfree(&pattern); + if (ok) + return 0; + + /* Failure to add, assume event_or_pmu is an event name. */ + zfree(listp); + if (!parse_events_multi_pmu_add(parse_state, event_or_pmu, const_parsed_t= erms, listp, loc)) + return 0; + + if (asprintf(&help, "Unable to find PMU or event on a PMU of '%s'", event= _or_pmu) < 0) + help =3D NULL; + parse_events_error__handle(parse_state->error, loc->first_column, + strdup("Bad event or PMU"), + help); + zfree(listp); + return -EINVAL; +} + int parse_events__modifier_group(struct list_head *list, char *event_mod) { diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 809359e8544e..a331b9f0da2b 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -209,10 +209,6 @@ int parse_events_add_breakpoint(struct parse_events_st= ate *parse_state, struct list_head *list, u64 addr, char *type, u64 len, struct parse_events_terms *head_config); -int parse_events_add_pmu(struct parse_events_state *parse_state, - struct list_head *list, const char *name, - const struct parse_events_terms *const_parsed_terms, - bool auto_merge_stats, void *loc); =20 struct evsel *parse_events__add_event(int idx, struct perf_event_attr *att= r, const char *name, const char *metric_id, @@ -223,6 +219,12 @@ int parse_events_multi_pmu_add(struct parse_events_sta= te *parse_state, const struct parse_events_terms *const_parsed_terms, struct list_head **listp, void *loc); =20 +int parse_events_multi_pmu_add_or_add_pmu(struct parse_events_state *parse= _state, + const char *event_or_pmu, + const struct parse_events_terms *const_parsed_terms, + struct list_head **listp, + void *loc_); + void parse_events__set_leader(char *name, struct list_head *list); void parse_events_update_lists(struct list_head *list_event, struct list_head *list_all); diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index d70f5d84af92..14175eee9489 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -273,78 +273,17 @@ event_def: event_pmu | event_pmu: PE_NAME opt_pmu_config { - struct parse_events_state *parse_state =3D _parse_state; /* List of created evsels. */ struct list_head *list =3D NULL; - char *pattern =3D NULL; - -#define CLEANUP \ - do { \ - parse_events_terms__delete($2); \ - free(list); \ - free($1); \ - free(pattern); \ - } while(0) + int err =3D parse_events_multi_pmu_add_or_add_pmu(_parse_state, $1, $2, &= list, &@1); =20 - list =3D alloc_list(); - if (!list) { - CLEANUP; + parse_events_terms__delete($2); + free($1); + if (err =3D=3D -ENOMEM) YYNOMEM; - } - /* Attempt to add to list assuming $1 is a PMU name. */ - if (parse_events_add_pmu(parse_state, list, $1, $2, /*auto_merge_stats=3D= */false, &@1)) { - struct perf_pmu *pmu =3D NULL; - int ok =3D 0; - - /* Failure to add, try wildcard expansion of $1 as a PMU name. */ - if (asprintf(&pattern, "%s*", $1) < 0) { - CLEANUP; - YYNOMEM; - } - - while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { - const char *name =3D pmu->name; - - if (parse_events__filter_pmu(parse_state, pmu)) - continue; - - if (!strncmp(name, "uncore_", 7) && - strncmp($1, "uncore_", 7)) - name +=3D 7; - if (!perf_pmu__match(pattern, name, $1) || - !perf_pmu__match(pattern, pmu->alias_name, $1)) { - bool auto_merge_stats =3D perf_pmu__auto_merge_stats(pmu); - - if (!parse_events_add_pmu(parse_state, list, pmu->name, $2, - auto_merge_stats, &@1)) { - ok++; - parse_state->wild_card_pmus =3D true; - } - } - } - - if (!ok) { - /* Failure to add, assume $1 is an event name. */ - zfree(&list); - ok =3D !parse_events_multi_pmu_add(parse_state, $1, $2, &list, &@1); - } - if (!ok) { - struct parse_events_error *error =3D parse_state->error; - char *help; - - if (asprintf(&help, "Unable to find PMU or event on a PMU of '%s'", $1)= < 0) - help =3D NULL; - parse_events_error__handle(error, @1.first_column, - strdup("Bad event or PMU"), - help); - CLEANUP; - YYABORT; - } - } + if (err) + YYABORT; $$ =3D list; - list =3D NULL; - CLEANUP; -#undef CLEANUP } | PE_NAME sep_dc --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9D2B200B7 for ; Mon, 15 Apr 2024 06:36:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162998; cv=none; b=ukUy7K+W8J+bXJKyCa/Br9U7HcetyKgODsH7MnNkwCZK6Z4EgGZm6firIr/MfpxJ7b6/i/YrxBI5rQIeSZ6tOcP4xQSOgclBLR1qev+UB/ebNaCYbEdKoX82SzYP3pQk2r4ZaDMIUEkQKuRUbAS2L3N/1TVzdZiLsRGWPLNRq6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162998; c=relaxed/simple; bh=O7hIVbr0xqoOv6vBJUBcktxWCtmfzAofbpA7+d5SIhs=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=aw9b9UjIPQ9Ky29wAMZUMInBpdBHqvS4bribQjwIrJSPiizYjPcST5FXaGn8QLopTRlpZhw30SdKD91SBjDelvYWTfEuTm2+m82tGYNBKmQ9WHGQL35Z5/LnZCP6nvP5P3mD3kN9/CeIkAiry5GedunYDY88FZkory4ZphMttQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=RrgtutIL; arc=none smtp.client-ip=209.85.215.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="RrgtutIL" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-5e4a072ce28so3082933a12.0 for ; Sun, 14 Apr 2024 23:36:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713162995; x=1713767795; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=cBIPczyGmK1H1pt2G8mgcHP61YsaqzYuWfuwlwliFdk=; b=RrgtutILUolHbtiLYDeQ7CZbZ872b3LlbNocS+Hx6FpRHOOeyRY5wLvAQUCgtP80f/ rIWx3yQPAKNA9UozRK6c9+Cb7lLPPqDqAVqiy4ebspFhVIMUlbOgRWk6gVwpmgGEhly0 yoc5uYsXIMOrLvn9TW27reVlWkLXAKxAW/FePBVb9boAkxRZCrCHfdoQN7Gq8rwFYBFe ejjmQ2ciD2C79XsVRgul3H6X9GU//Yu2/3g1VXyACIveSTWyopXGevm6mFKle+TMKnbm rHaP8b6wuAz7cYM6LBKRVw75sTEIZzhnJEBELE0eqPz4whaSpj7FhpbNcJ7Erd9ifX/j 2yzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713162995; x=1713767795; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cBIPczyGmK1H1pt2G8mgcHP61YsaqzYuWfuwlwliFdk=; b=ME4m05Opol7MlRQ6Jm+PA5q1DFb931C3YiUY0uZNpsWqwtu2thqkbpZrY49YF4VvCc MLbPy/u9VNGv/EclVaoap90LMZ1WlP9Dk4XrG5ZZdwdo2lGnNW5BUSCYuscTBvXAAEFR TOHBH+N8aiYJhaSheiEtBXqplOA0Pg+Z9yVO1o53C76tkoxc8dyT3q9jtNZWeexymhBI Sh5LARnPAZDp6c/W/SG+pDmwhsYmtVPfm/og+9+1mRCRs4Fvf+Xc8loq98rY+bglC8eN f7I5gNqChFUInJpibZ7IET69bhZIruuVNKyjX9nR47zfJa1gf6zdBH+SN9+B5UR0g6yL N4Yg== X-Forwarded-Encrypted: i=1; AJvYcCVIG2nbh/i37G7vm0sbujHuvWQsf2Vv+W9zR04n3g1G8ZElTrBBPOBAtE29ULP5OuUjeZbVGDlLsWtrdzPqx0CZr6l3JBnaLVlOQ2ql X-Gm-Message-State: AOJu0YxGHrDt1mxLxdvRqFrN22t+2DjP7WTZMPdZjjDCWWEZ8AX9HWKg WydEwvNA0ThELESZQITj42se2Q4zRoG5Yy8Di6ptiRRS2rICUUaM2vmS5BpCqF4UAIzTfIUREop UlrHehQ== X-Google-Smtp-Source: AGHT+IHksE11INoODcmfSA8PUTVNGXIlCH66XxnH2VvOntZKJzWoEyBWTiUDIjjhs1caK8c5pV3a1jp10fJX X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a63:f919:0:b0:5db:edca:d171 with SMTP id h25-20020a63f919000000b005dbedcad171mr25389pgi.6.1713162994834; Sun, 14 Apr 2024 23:36:34 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:19 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-3-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 2/9] perf parse-events: Directly pass PMU to parse_events_add_pmu From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid passing the name of a PMU then finding it again, just directly pass the PMU. parse_events_multi_pmu_add_or_add_pmu is the only version that needs to find a PMU, so move the find there. Remove the error message as parse_events_multi_pmu_add_or_add_pmu will given an error at the end when a name isn't either a PMU name or event name. Without the error message being created the location in the input parameter (loc) can be removed. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 46 +++++++++++++--------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index b16c75bf5580..bc4a5e3c6c21 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1386,32 +1386,18 @@ static bool config_term_percore(struct list_head *c= onfig_terms) } =20 static int parse_events_add_pmu(struct parse_events_state *parse_state, - struct list_head *list, const char *name, - const struct parse_events_terms *const_parsed_terms, - bool auto_merge_stats, void *loc_) + struct list_head *list, struct perf_pmu *pmu, + const struct parse_events_terms *const_parsed_terms, + bool auto_merge_stats) { struct perf_event_attr attr; struct perf_pmu_info info; - struct perf_pmu *pmu; struct evsel *evsel; struct parse_events_error *err =3D parse_state->error; - YYLTYPE *loc =3D loc_; LIST_HEAD(config_terms); struct parse_events_terms parsed_terms; bool alias_rewrote_terms =3D false; =20 - pmu =3D parse_state->fake_pmu ?: perf_pmus__find(name); - - if (!pmu) { - char *err_str; - - if (asprintf(&err_str, - "Cannot find PMU `%s'. Missing kernel support?", - name) >=3D 0) - parse_events_error__handle(err, loc->first_column, err_str, NULL); - return -EINVAL; - } - parse_events_terms__init(&parsed_terms); if (const_parsed_terms) { int ret =3D parse_events_terms__copy(const_parsed_terms, &parsed_terms); @@ -1425,9 +1411,9 @@ static int parse_events_add_pmu(struct parse_events_s= tate *parse_state, =20 strbuf_init(&sb, /*hint=3D*/ 0); if (pmu->selectable && list_empty(&parsed_terms.terms)) { - strbuf_addf(&sb, "%s//", name); + strbuf_addf(&sb, "%s//", pmu->name); } else { - strbuf_addf(&sb, "%s/", name); + strbuf_addf(&sb, "%s/", pmu->name); parse_events_terms__to_strbuf(&parsed_terms, &sb); strbuf_addch(&sb, '/'); } @@ -1469,7 +1455,7 @@ static int parse_events_add_pmu(struct parse_events_s= tate *parse_state, =20 strbuf_init(&sb, /*hint=3D*/ 0); parse_events_terms__to_strbuf(&parsed_terms, &sb); - fprintf(stderr, "..after resolving event: %s/%s/\n", name, sb.buf); + fprintf(stderr, "..after resolving event: %s/%s/\n", pmu->name, sb.buf); strbuf_release(&sb); } =20 @@ -1583,8 +1569,8 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, continue; =20 auto_merge_stats =3D perf_pmu__auto_merge_stats(pmu); - if (!parse_events_add_pmu(parse_state, list, pmu->name, - &parsed_terms, auto_merge_stats, loc)) { + if (!parse_events_add_pmu(parse_state, list, pmu, + &parsed_terms, auto_merge_stats)) { struct strbuf sb; =20 strbuf_init(&sb, /*hint=3D*/ 0); @@ -1596,8 +1582,8 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, } =20 if (parse_state->fake_pmu) { - if (!parse_events_add_pmu(parse_state, list, event_name, &parsed_terms, - /*auto_merge_stats=3D*/true, loc)) { + if (!parse_events_add_pmu(parse_state, list, parse_state->fake_pmu, &par= sed_terms, + /*auto_merge_stats=3D*/true)) { struct strbuf sb; =20 strbuf_init(&sb, /*hint=3D*/ 0); @@ -1626,7 +1612,7 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pars= e_events_state *parse_state { char *pattern =3D NULL; YYLTYPE *loc =3D loc_; - struct perf_pmu *pmu =3D NULL; + struct perf_pmu *pmu; int ok =3D 0; char *help; =20 @@ -1637,10 +1623,12 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pa= rse_events_state *parse_state INIT_LIST_HEAD(*listp); =20 /* Attempt to add to list assuming event_or_pmu is a PMU name. */ - if (!parse_events_add_pmu(parse_state, *listp, event_or_pmu, const_parsed= _terms, - /*auto_merge_stats=3D*/false, loc)) + pmu =3D parse_state->fake_pmu ?: perf_pmus__find(event_or_pmu); + if (pmu && !parse_events_add_pmu(parse_state, *listp, pmu, const_parsed_t= erms, + /*auto_merge_stats=3D*/false)) return 0; =20 + pmu =3D NULL; /* Failed to add, try wildcard expansion of event_or_pmu as a PMU name. */ if (asprintf(&pattern, "%s*", event_or_pmu) < 0) { zfree(listp); @@ -1660,8 +1648,8 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pars= e_events_state *parse_state !perf_pmu__match(pattern, pmu->alias_name, event_or_pmu)) { bool auto_merge_stats =3D perf_pmu__auto_merge_stats(pmu); =20 - if (!parse_events_add_pmu(parse_state, *listp, pmu->name, const_parsed_= terms, - auto_merge_stats, loc)) { + if (!parse_events_add_pmu(parse_state, *listp, pmu, const_parsed_terms, + auto_merge_stats)) { ok++; parse_state->wild_card_pmus =3D true; } --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6332D2110F for ; Mon, 15 Apr 2024 06:36:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162999; cv=none; b=P4joCF23FKfiM7sF66AdrH1ahVdjY1+AwUT46++sYVZs7+6MBfKrLkMrNTiLZSoiOJOxGdn9EP8DWgk88qP5OXdS6oY9QglojgpDeYTcDXFTGQ1suzwsVQGGAeVHZ7R729NwBtBw7tA8ToXQqeea4Av5Ha1tpoNYUs5Ggt9HgnA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713162999; c=relaxed/simple; bh=A9tG8iOIBqHAbekqVK9mlABKDk+WYPW2yjNIRApp2Ow=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=enKRBvilS48vbg4cZWWJ0TLYWcsdEr4J7/oOgGmXthIeZctCV1smkYpMU3CQcDh22rUOSMeP8xgyeL030XxC+xS6+OOgYDc0NnniyuXCLtQzZWuXXnG7e1bZSHKzcFrtl/1j71bWBGqCufKkE2VDE56+lglq7UZfhxB6+UWc1fA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=frTX9Xd5; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="frTX9Xd5" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dcc0bcf9256so4041982276.3 for ; Sun, 14 Apr 2024 23:36:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713162997; x=1713767797; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=p+gciuZSLFdHIk1i0SV08AyznRpAEm+5KjCzM2jFJbc=; b=frTX9Xd5/JSeHqyqq4FTi1Zm+ZTlCqczsOi7cq5poH8+Zcmv5mDAtmNRiwyrH8HMmI SJ4+5rcl6LnwxY88Jc/jGf86G9AhMhU6fIqDFHocDvga58vCYbmd3L4xgFeJGo9NuYBB ZhxZnpE3z+BpIGR2X2ZtuVZzRnfoZ5/mVR1laEcxHTmEHXxe2/U/aURQYE6l04nD/G3i 75qeIoB2wGnZesTey+yRYJ8ioVHl7TrFUZVahqF84x7WYHBX6JmcAGwk1152vmShppna OouHSvDkTdU6MMcer9yAsy+U+dTppoME3tfeFFG84VAuCl2T0Q41ZerBqIrXyLw22SBT AfHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713162997; x=1713767797; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=p+gciuZSLFdHIk1i0SV08AyznRpAEm+5KjCzM2jFJbc=; b=a5O+WgL9JCYJ90xdhktcaxNANstSeyyIUqbvlW75gigVP27W0xiXQ83TtCxZKGvn1p N8Oo3iTks/oTMm0u06tGZgeFFt+PZ0/1cP0cfKhWMef/P4WCyb5EiTgZaSycQVXzAA4x ALAQnl9HFkmms44zcCWxew6xTizNXghXALOti/7NuLF1sFGPLWepUXfPd/QaRBuOgsko Cx6SLJwyPUtDD44pmUh+eHXR/5j9bmodM3DNyDuCbz3in1ODsJMyGyxWJuSghbdPJ2wF 3NL3iWznBzvrm9aEaXqqiL2GgnVajwGyGZcAPE3UoeF97P5C9uQRnSu2ws/8OEwDZK+/ dc/A== X-Forwarded-Encrypted: i=1; AJvYcCXrV6zIo6PL7sxiV6cm1hnTNboHD1SlJ0hoTestTiXePafv1TqjUrBdVgtG1UMnBP5hoSuNZfPm7orKXBOsEEkFZoiPqrLer97pMoYC X-Gm-Message-State: AOJu0YwXUE7ND29Ru9OJW76w4GKFRJe7pM6duUYKThB1L1dQcuiRU9Ha P8h2JIrfuAgYO5VYtdGuFfg5sNBULUTiDXj8hwZgwF1bFyi9MZfH/ixN/Mc3qeOzZCogCcFBdHS TLpRi9A== X-Google-Smtp-Source: AGHT+IFL+Tvkj6R3nO3XnJ0ewuekhH4PPx8UF3ahuI3cz/n03WZ3OYIbXOAvlx9w1Oc053fj9XHZnbkS+UNY X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a25:b21b:0:b0:dda:c566:dadd with SMTP id i27-20020a25b21b000000b00ddac566daddmr529521ybj.4.1713162997423; Sun, 14 Apr 2024 23:36:37 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:20 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-4-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 3/9] perf parse-events: Avoid copying an empty list From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In parse_events_add_pmu, delay copying the list of terms until it is known the list contains terms. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index bc4a5e3c6c21..7e23168deeb9 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1398,29 +1398,20 @@ static int parse_events_add_pmu(struct parse_events= _state *parse_state, struct parse_events_terms parsed_terms; bool alias_rewrote_terms =3D false; =20 - parse_events_terms__init(&parsed_terms); - if (const_parsed_terms) { - int ret =3D parse_events_terms__copy(const_parsed_terms, &parsed_terms); - - if (ret) - return ret; - } - if (verbose > 1) { struct strbuf sb; =20 strbuf_init(&sb, /*hint=3D*/ 0); - if (pmu->selectable && list_empty(&parsed_terms.terms)) { + if (pmu->selectable && const_parsed_terms && list_empty(&const_parsed_te= rms->terms)) { strbuf_addf(&sb, "%s//", pmu->name); } else { strbuf_addf(&sb, "%s/", pmu->name); - parse_events_terms__to_strbuf(&parsed_terms, &sb); + parse_events_terms__to_strbuf(const_parsed_terms, &sb); strbuf_addch(&sb, '/'); } fprintf(stderr, "Attempt to add: %s\n", sb.buf); strbuf_release(&sb); } - fix_raw(&parsed_terms, pmu); =20 memset(&attr, 0, sizeof(attr)); if (pmu->perf_event_attr_init_default) @@ -1428,7 +1419,7 @@ static int parse_events_add_pmu(struct parse_events_s= tate *parse_state, =20 attr.type =3D pmu->type; =20 - if (list_empty(&parsed_terms.terms)) { + if (!const_parsed_terms || list_empty(&const_parsed_terms->terms)) { evsel =3D __add_event(list, &parse_state->idx, &attr, /*init_attr=3D*/true, /*name=3D*/NULL, /*metric_id=3D*/NULL, pmu, @@ -1437,6 +1428,15 @@ static int parse_events_add_pmu(struct parse_events_= state *parse_state, return evsel ? 0 : -ENOMEM; } =20 + parse_events_terms__init(&parsed_terms); + if (const_parsed_terms) { + int ret =3D parse_events_terms__copy(const_parsed_terms, &parsed_terms); + + if (ret) + return ret; + } + fix_raw(&parsed_terms, pmu); + /* Configure attr/terms with a known PMU, this will set hardcoded terms. = */ if (config_attr(&attr, &parsed_terms, parse_state->error, config_term_pmu= )) { parse_events_terms__exit(&parsed_terms); --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8714523773 for ; Mon, 15 Apr 2024 06:36:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163001; cv=none; b=soLBTnp62+U4Hk/Pso5pb5boRKXaWnj6MaFhLl8O8CHgL83xAm9CeD1PEc95NyaygwNxOX9QR0lgGcx5qQOXPds5jRMF/Hi7twlL+P6nTmhdPS2T62YChm6avZKou5/7ZSCErOu1Vy/81OJdML/Yw1pBdLlq2n3Z7QB65DoCeZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163001; c=relaxed/simple; bh=NNBkMnc8dVfv9V9vLNnG/1mM4wevTmH7XxAWAoZoX9s=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=mgu5OYqKo+nLqDXwfSvlEPSIx5yqgCdUW4Wwno/LqiIMN5yeu1vrF0PsO0D0faRDEXL1NXTULZB80dnpr5mp09BsP90BO6dm7Hbfr4f8ESsVuZ2T7wOFiIbOkJ5sXNzV0ktNOzYHHzz7U4pTOlu27bDBDS3W3Deb32ei+RCaaDc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TbZ5OWR4; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TbZ5OWR4" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-2a4ff147030so3192937a91.3 for ; Sun, 14 Apr 2024 23:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163000; x=1713767800; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=Vbu7aFj7CDfYjc9NaQu8KLUrRIg296ZgDVYr3Mka6h8=; b=TbZ5OWR4dcZPAUr+UopubPh2FcGLDS0ONnCJFxgHxUqtS0bzBL/HV19y7Rm8ZplN0d S/zn8yvhXGvIK9Ec/zM/FKR0w9XqD49OWI7KeOOahxpfnLSBE2XuHYRnTCRFj9GXfTje Tzi9knPort4OGWaq7DvMZ6ESh791hWEyY2jFl774qQvQz54gl/GhkMRK53oshATSgUAI cU3UD/7pW1Vtxp6pQbxt+PfOBB3v9FG8Ylt5ox6GmrNhDChbQLYB9fudvEQLKAug4kp5 EEB/I2LQa9k7xugeUKQNiKvGqgOkr/JS9Z5SdzSji7X/wYkcQiCbYwakOit7TBmtbo7G UzPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163000; x=1713767800; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Vbu7aFj7CDfYjc9NaQu8KLUrRIg296ZgDVYr3Mka6h8=; b=InEekbzg2wA80Jv5JDbYzUCS727tOQxE2l0ntnWSEzrGspLKZ9KvKC7qkgKboTlqOG g+af5QGv45yJhNarRyye7o809oNNyqNeDnUhZhKej3cMS2jpN1AquXOjiAYR/XXByj0t wdGsyVEcn6kkCZj+XLJX3Ge2F6LZQBQbkV4UlHtfEMheSNrdF74nW4A44PdIHmPWMbtv hEIm/BWiWLiqaG1cP+15CwMHaXtPszbLeDsvSs8utuTCak8acwyh9hhD4yj2ExQKO8+e zZ6+WPA1HeKAWCITEGY0nvm6jxHyVuThdHmRettGnGD5su+emVVsb4TLHtqq5KEUwEd4 MAOw== X-Forwarded-Encrypted: i=1; AJvYcCWoROEPRRRkC7ESNsjlPwM9/kIPLn5oRIalKklJOLqeKjFVOEctsf5YmPRozrX8aiGtGg8ayFeKP1nlQongCAU0OUKnvp1vXZLwaW6i X-Gm-Message-State: AOJu0YxOjJul5xEI2++mqSSoZg+5DPylkiDytA7deLtbyVPyCJwyLUsP UA243kLBCRahnbSx8UE4oQ1qAKGCHYCCOpWxK/oiNZ0BfoOkwcuTuqE5Sl/kCqgBptPp8kGuyzq JmcssfQ== X-Google-Smtp-Source: AGHT+IF81B9h9k2M6zDz/afTJ7Wc9UGW5/Q0UBXG/tDqklKUIScYFFrhSUp9FPvMgq45GrANH22AdKOozLUh X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a17:90a:f287:b0:29b:f937:cc00 with SMTP id fs7-20020a17090af28700b0029bf937cc00mr27827pjb.7.1713162999848; Sun, 14 Apr 2024 23:36:39 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:21 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-5-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 4/9] perf pmu: Refactor perf_pmu__match From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move all implementation to pmu code. Don't allocate a fnmatch wildcard pattern, matching ignoring the suffix already handles this, and only use fnmatch if the given PMU name has a '*' in it. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 19 ++----------------- tools/perf/util/pmu.c | 27 +++++++++++++++++++-------- tools/perf/util/pmu.h | 2 +- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 7e23168deeb9..f4de374dab59 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1610,7 +1610,6 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pars= e_events_state *parse_state struct list_head **listp, void *loc_) { - char *pattern =3D NULL; YYLTYPE *loc =3D loc_; struct perf_pmu *pmu; int ok =3D 0; @@ -1630,22 +1629,9 @@ int parse_events_multi_pmu_add_or_add_pmu(struct par= se_events_state *parse_state =20 pmu =3D NULL; /* Failed to add, try wildcard expansion of event_or_pmu as a PMU name. */ - if (asprintf(&pattern, "%s*", event_or_pmu) < 0) { - zfree(listp); - return -ENOMEM; - } - while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { - const char *name =3D pmu->name; - - if (parse_events__filter_pmu(parse_state, pmu)) - continue; - - if (!strncmp(name, "uncore_", 7) && - strncmp(event_or_pmu, "uncore_", 7)) - name +=3D 7; - if (!perf_pmu__match(pattern, name, event_or_pmu) || - !perf_pmu__match(pattern, pmu->alias_name, event_or_pmu)) { + if (!parse_events__filter_pmu(parse_state, pmu) && + perf_pmu__match(pmu, event_or_pmu)) { bool auto_merge_stats =3D perf_pmu__auto_merge_stats(pmu); =20 if (!parse_events_add_pmu(parse_state, *listp, pmu, const_parsed_terms, @@ -1655,7 +1641,6 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pars= e_events_state *parse_state } } } - zfree(&pattern); if (ok) return 0; =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index ce72c99e4f61..d7521d84fe4a 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -2073,18 +2073,29 @@ void perf_pmu__warn_invalid_config(struct perf_pmu = *pmu, __u64 config, name ?: "N/A", buf, config_name, config); } =20 -int perf_pmu__match(const char *pattern, const char *name, const char *tok) +bool perf_pmu__match(const struct perf_pmu *pmu, const char *tok) { - if (!name) - return -1; + const char *name =3D pmu->name; + bool need_fnmatch =3D strchr(tok, '*') !=3D NULL; =20 - if (fnmatch(pattern, name, 0)) - return -1; + if (!strncmp(tok, "uncore_", 7)) + tok +=3D 7; + if (!strncmp(name, "uncore_", 7)) + name +=3D 7; =20 - if (tok && !perf_pmu__match_ignoring_suffix(name, tok)) - return -1; + if (perf_pmu__match_ignoring_suffix(name, tok) || + (need_fnmatch && !fnmatch(tok, name, 0))) + return true; =20 - return 0; + name =3D pmu->alias_name; + if (!name) + return false; + + if (!strncmp(name, "uncore_", 7)) + name +=3D 7; + + return perf_pmu__match_ignoring_suffix(name, tok) || + (need_fnmatch && !fnmatch(tok, name, 0)); } =20 double __weak perf_pmu__cpu_slots_per_cycle(void) diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 152700f78455..93d03bd3ecbe 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -263,7 +263,7 @@ void perf_pmu__warn_invalid_config(struct perf_pmu *pmu= , __u64 config, const char *config_name); void perf_pmu__warn_invalid_formats(struct perf_pmu *pmu); =20 -int perf_pmu__match(const char *pattern, const char *name, const char *tok= ); +bool perf_pmu__match(const struct perf_pmu *pmu, const char *tok); =20 double perf_pmu__cpu_slots_per_cycle(void); int perf_pmu__event_source_devices_scnprintf(char *pathname, size_t size); --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F4FE2CCB4 for ; Mon, 15 Apr 2024 06:36:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163004; cv=none; b=ZwmDFD/uCYnRLhNesPXpc0m8NSmBpVh+UP/ZttjYWibwATQk4OW97lRfMqf69Etz4ARcLnHQEmG6BnFf2lcqQqLOuIbU1HTDeG6wqua+s3vF85CPdwDr0bCEBluNwJJL5AGTqmpaHILWY2AdhrfLld/Nrf4vAtJJSzQEaLs1Xws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163004; c=relaxed/simple; bh=jUPnR8Eh1nwHTyI5wvU5SHFzAhN1eHw5S1/Bwquryzg=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=MhumaudpRG4j6ELdh15Vw9lwQa76vkgjv9QTnQhBabnHyKc1rxbfvqth9RJeqq35VSkw7LJDYnkoNf6z5/0P8yZa9zITFV1i3ewYKvW5HCa+tlKgUJwP4AtSXsStL8seJ7Nr4+8sq0dR3/PyQo6I8s2RxTOsfsM1bnvADa5Whv4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SIECwNHa; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SIECwNHa" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc64f63d768so5174062276.2 for ; Sun, 14 Apr 2024 23:36:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163002; x=1713767802; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=UJgB8sDKrPml3/XRc3D6gD41xE7ASJL2MP2+Oe/niCE=; b=SIECwNHaQmrpfZYnKBB0Ly/Gf8P0kSq0pb5NqjFquI20T7ff8+tTuLTLthb/WZTpLU Ri0Vv9K6st0zdgz9XT4lUth6FmBgSxjy+iPE3VXoFqYfi+O/GVsU4WESbmRnB83EBmoP yaL+sfQREnEBLVomS9AXYEH3bgP6zqUaIsQTDfOXMC+EGSNTMco4lr+oRx+g00dVVHEg rdoPptK3UTggcUEE1kyiFYyf/BFzf8uXwcCW6I0wkRFuOC2XQmb8NMxu4ij5bz76Z2mX 38CNIHG3UIvrp6cBAdzP7rtazn9Tq67DG9ORLiCP3rd0XdgFKE7yVrjb5h2URXeCHb6S 2wSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163002; x=1713767802; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UJgB8sDKrPml3/XRc3D6gD41xE7ASJL2MP2+Oe/niCE=; b=mGiVzA18QeGK4wF/VAxpUz3+VhVHWU2MxCyaZkauP4Aos87DfgF5lUBnm4g+cr7Uia ZS3ntreF512RvqwVQtZyUENj9DO1stDRKUW5DCmfcQjHIDRGcWNB/VD2o+PxK3FUKFke LCwroNslDtSO8fkIXaC+UVVqz9ml82S7EgGIeqrm8AQMclBwMquY3YDNOUdW1Jwt1LrD nDIx6Asa5xvRvDzgZBQ3LkxlTUWE46KRhQ7mC8zHH39KAp3Nl+AlOzOtutEmkWVA9pXI uQKXLp6JwgWs6beJ3ZoqVP3H2DWKtV2yIT9HawbIw+ECF6ftO4yIHC+YSTHJZBIATTdD egWw== X-Forwarded-Encrypted: i=1; AJvYcCWWQoLFsOn9zyfT4YqBPxCqRYRhvm18MVi6aE+6UPpHwPlspW9ysDrVBJEI/9hui9Em1z1+xv41PyPynue8hUiNVWvc7NWKukHy0+JN X-Gm-Message-State: AOJu0YwV60Yrj3zDcjJ2YHn7i9n5+VuBgBh4MANBg3uWAp6iYDpSuSp6 E8zhY2MzixogSpB+m/jVvUeTEV5OMw50jdHgWOVLBkSMjSCxp3a4fTvMiW8F5Bo4sNT2gENInWW ZTOXRyA== X-Google-Smtp-Source: AGHT+IEiiZuVjgyhNgTTLyZ6Sh7UYfcc0UNFuJ2n/bK+2GCusGz73ratukmMFcwYpUzQY+G7b8Ltwey08z2j X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a05:6902:1549:b0:dc6:dfd9:d431 with SMTP id r9-20020a056902154900b00dc6dfd9d431mr2983520ybu.1.1713163002294; Sun, 14 Apr 2024 23:36:42 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:22 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-6-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 5/9] perf tests parse-events: Use branches rather than cache-references From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Switch from cache-references to branches in test as Intel has a sysfs event for cache-references and changing the priority for sysfs over legacy causes the test to fail. Signed-off-by: Ian Rogers --- tools/perf/tests/parse-events.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-event= s.c index 0b70451451b3..993e482f094c 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -942,8 +942,8 @@ static int test__group2(struct evlist *evlist) continue; } if (evsel->core.attr.type =3D=3D PERF_TYPE_HARDWARE && - test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) { - /* cache-references + :u modifier */ + test_config(evsel, PERF_COUNT_HW_BRANCH_INSTRUCTIONS)) { + /* branches + :u modifier */ TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel= ); TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); @@ -2032,7 +2032,7 @@ static const struct evlist_test test__events[] =3D { /* 8 */ }, { - .name =3D "{faults:k,cache-references}:u,cycles:k", + .name =3D "{faults:k,branches}:u,cycles:k", .check =3D test__group2, /* 9 */ }, --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72FBD364AC for ; Mon, 15 Apr 2024 06:36:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163007; cv=none; b=mVILAHJjVnvYlnQToaS5qJD4+S3sfx1S8CiF1Rw92THPERmvwS60c3CGfighpv66knM16wbkipxmJDHbx05l9c1rzzD5Ugfmh97MdDo8xoD7t+9Xj4+NAP/UWb3ShwPY663/CnBMdUNiHiAvaYnOmc6UNlQrCnw3f4Xt5kTlp/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163007; c=relaxed/simple; bh=0qNUELlBjl8dO1+sdDUCDBg6O9xZvVY5pIsvof/yf3Y=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=tH2BdaA0iL1ZMAJm/e97IyTlDBJuevioHXT74U1D8STJQpnj7WMGV9h0LRjz432y6tjZrY4chJ9IG7cVQ3uoVwU4+D3v3SzbhULjaju0p2a9aN0NTSFQWmfUU9Oxc6aj15jiGfy0MLzLj6vOeNiart3R/rLRNEC8r2I6HDj6FNs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=whYhHOca; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="whYhHOca" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-ddaf2f115f2so4155933276.3 for ; Sun, 14 Apr 2024 23:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163005; x=1713767805; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=hx/Ta0rDGqfG4yTzEhISDdPx4oXkJbCeHRtXa2sGNYw=; b=whYhHOcapG2gxVPKNsrJ1t/iUzeCyUiF0iaJ41cp+kFsRWALiNmG+NCp/AnlVjNFNO zwwbbpDQftH6OGur+ZQvBZSJ3nu3USJqpbgHXlHbKZypi71MMByRGWHOTUmcFL04oBFb 8jDglc0tYbWojnI2nWcO2FhR+jlR5CyvJyrstEhCts9ucqVunhELgGUmbSEu0km/j40m 9wY545dSOaGSE1r8wl4vzjmNmLEca3QmJbcbTzxvG3m8nUSWLbuzToMU7+6yYPT4ACZS b8oW/hqwD+EcG4MBKsgUgs1I9MfN488WOpVYcWj18eNLANbnpabydyh2yU2kttCPopHv Ii2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163005; x=1713767805; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=hx/Ta0rDGqfG4yTzEhISDdPx4oXkJbCeHRtXa2sGNYw=; b=nLDcXnY0ldBCAx57Jmog9ES4pzHoPstCJUokArn0LWKcRcXFIcPwnOZRPk1biXRC9G NIkCcWcFsurQMmUs463WPOq+VNh7BkW1QsywOm7pOgLwtBtpLEo8njXt4jPWVa2CUtb3 JN+MzfTe5llRIKu/b4VEszpNtmvgftX8KwwRZ5VYVk2Zs6a1xihgwJZdBxCywI5THxLl pwV9TV98Cp01mqNADPgtkY61NL8rZy3UtGPeXmjs4K4JqrsLuz4EdIf1K+5hKDoBtaut GULyB4hzZGZbdfziOs5Z18Ybi8wXnJV4IBeJ/iZ0OUWoOnbNBULNM84DEZENYEGBH8mU 2zJw== X-Forwarded-Encrypted: i=1; AJvYcCVY1d+ASFg7AHGrMq0vBN7yryujARl2Q6YiEGOPLGeUg+GmXiW8z7izqs3CUAWOTCMos7CReOGIHidPKBQMOuMISnq/29kLZ7MjWy8S X-Gm-Message-State: AOJu0YzmHOGjU2NOuBxpJdsfxKL4c1fK1bll7ljmTcFQzU/mDXvqxoIy QrJ3Rf/9pbZgrVBLzcYPXqa49aBEgOsiF49lpJ6DRxehY76rf+w0l87UFvPVrUyTBLur7tnSvW4 pkOj0Jg== X-Google-Smtp-Source: AGHT+IGKjbFopUbPAz4023seU2rQZ1FOntIZ8rt7x+OCB1yu2RcNgzS+jPNzrST2MfTWwwugdpm9slVKlTFo X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a05:6902:120b:b0:de0:ecc6:87b with SMTP id s11-20020a056902120b00b00de0ecc6087bmr742661ybu.1.1713163004978; Sun, 14 Apr 2024 23:36:44 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:23 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-7-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 6/9] perf parse-events: Legacy cache names on all PMUs and lower priority From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prior behavior is to not look for legacy cache names in sysfs/json and to create events on all core PMUs. New behavior is to look for sysfs/json events first on all PMUs, for core PMUs add a legacy event if the sysfs/json event isn't present. This is done so that there is consistency with how event names in terms are handled and their prioritization of sysfs/json over legacy. It may make sense to use a legacy cache event name as an event name on a non-core PMU so we should allow it. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 38 +++++++++++++++++++++++++++------- tools/perf/util/parse-events.h | 2 +- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index f4de374dab59..f711ad9b18f0 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -442,17 +442,21 @@ bool parse_events__filter_pmu(const struct parse_even= ts_state *parse_state, return strcmp(parse_state->pmu_filter, pmu->name) !=3D 0; } =20 +static int parse_events_add_pmu(struct parse_events_state *parse_state, + struct list_head *list, struct perf_pmu *pmu, + const struct parse_events_terms *const_parsed_terms, + bool auto_merge_stats); + int parse_events_add_cache(struct list_head *list, int *idx, const char *n= ame, struct parse_events_state *parse_state, - struct parse_events_terms *head_config) + struct parse_events_terms *parsed_terms) { struct perf_pmu *pmu =3D NULL; bool found_supported =3D false; - const char *config_name =3D get_config_name(head_config); - const char *metric_id =3D get_config_metric_id(head_config); + const char *config_name =3D get_config_name(parsed_terms); + const char *metric_id =3D get_config_metric_id(parsed_terms); =20 - /* Legacy cache events are only supported by core PMUs. */ - while ((pmu =3D perf_pmus__scan_core(pmu)) !=3D NULL) { + while ((pmu =3D perf_pmus__scan(pmu)) !=3D NULL) { LIST_HEAD(config_terms); struct perf_event_attr attr; int ret; @@ -460,6 +464,24 @@ int parse_events_add_cache(struct list_head *list, int= *idx, const char *name, if (parse_events__filter_pmu(parse_state, pmu)) continue; =20 + if (perf_pmu__have_event(pmu, name)) { + /* + * The PMU has the event so add as not a legacy cache + * event. + */ + ret =3D parse_events_add_pmu(parse_state, list, pmu, + parsed_terms, + perf_pmu__auto_merge_stats(pmu)); + if (ret) + return ret; + continue; + } + + if (!pmu->is_core) { + /* Legacy cache events are only supported by core PMUs. */ + continue; + } + memset(&attr, 0, sizeof(attr)); attr.type =3D PERF_TYPE_HW_CACHE; =20 @@ -469,11 +491,11 @@ int parse_events_add_cache(struct list_head *list, in= t *idx, const char *name, =20 found_supported =3D true; =20 - if (head_config) { - if (config_attr(&attr, head_config, parse_state->error, config_term_com= mon)) + if (parsed_terms) { + if (config_attr(&attr, parsed_terms, parse_state->error, config_term_co= mmon)) return -EINVAL; =20 - if (get_config_terms(head_config, &config_terms)) + if (get_config_terms(parsed_terms, &config_terms)) return -ENOMEM; } =20 diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index a331b9f0da2b..db47913e54bc 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -203,7 +203,7 @@ int parse_events_add_tool(struct parse_events_state *pa= rse_state, int tool_event); int parse_events_add_cache(struct list_head *list, int *idx, const char *n= ame, struct parse_events_state *parse_state, - struct parse_events_terms *head_config); + struct parse_events_terms *parsed_terms); int parse_events__decode_legacy_cache(const char *name, int pmu_type, __u6= 4 *config); int parse_events_add_breakpoint(struct parse_events_state *parse_state, struct list_head *list, --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 684E9364A0 for ; Mon, 15 Apr 2024 06:36:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163009; cv=none; b=CPux+Yk27w23tdGbTF9pDwIL6YbZSA8ipEr43n6i5WzvR1eyCGgzAt7r5lP+1dLOLXn8qugVRrJiZpM+0sZxgdpDk7naeRym7biAWiotNnqK+7kPS/1vpDGl06IidjlSxEhOJNswi1yTWs7hphN4Zm0Y/U4KY1L8dEnbM/l+lxI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163009; c=relaxed/simple; bh=yRXdGKWgYrAy4QEN4utAId08JcclyUD6POZY54MLD3g=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=OM0oPyckLGbVEqt9gkSDPaHJsAM7HIRT1cnX8P9DspH4XE+rJlyaGGdCy/GE83kamvKiof2EbWRxkuro4UPZz5OzoYKNxgS27pZGVMH/GkTtOPx0S2+YcjKqGxLAW79sD3Y0TRjbf+4nFwZBJTMbboY/hK5UIrbpWSmnwLYiBzE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jDzBHwiA; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jDzBHwiA" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-618596c23b4so45111877b3.0 for ; Sun, 14 Apr 2024 23:36:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163007; x=1713767807; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=t6u9K3gcjLrMHLCFAhYLG4bnVQmGcLUFFxbpFKDU6RA=; b=jDzBHwiAOkRQskyS5zSTKTDjRWNAisWGYxkQYiJHclJSKc6s5nkq5mcNDw5yP+/sEB BFWqiKD9XbxK8gyJCu1tFIf2sZnqE7Es9jS5YcsEe2qkgfHKFQoadiV1PQ5SA0q6bG9y r5rusuuE+q77qkwkTm5Z5I9xn4WYjvUPmSfw94d/lsAa+fUaMNMPYWOV+vfhl5OWsIsx JzdHvJQl90399wtcKZhgQAgk2lEkXwjZ9UpGJLac+AAqkMtu7j0Nr+I4xz3TCiPHPs3P HRTA9Gveyg1N5b+eyYT7rR2SPQ/jXtaxBuMaAUx2BfyL5ANmiVX7J921CG7Xf8RXF939 zasw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163007; x=1713767807; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=t6u9K3gcjLrMHLCFAhYLG4bnVQmGcLUFFxbpFKDU6RA=; b=eS2ev/aWRe13F2w6TbkrxA5j52mHQOHN3aT26fp4F47Ww/2WWFPYu/PtDvhCzWof1K hvq/e/SDwBWG7bfuehChp9S/KuRQj2JV95sTJmLx6DUGIf420EHdcmcsPdBDHgkiAO+D GZbrEzIxgZZC8TgiJJa2LvonPipyKAGZQSrYldS9Fnq4EXiljwzH49dIKE7qHYbwExW0 2RStrA955pWovJwOZIZL5+mA2q7v1xGQT20RQIv90j6XdKxJSH9o2IolWpVBBZQccm22 mIY7LzOdqEzb7yqeCFETLk0GMs4NrqDQAhKsyntqw/2iqgwuRhfETYh0rEZd7rH+06Z4 ljEw== X-Forwarded-Encrypted: i=1; AJvYcCVNz/zMQ5Me/AkabIrTSi8/OChCjsjPi4ZrrCgcAzxQJ1EOGWpu0n5MbR8KsyL41ITqzx3hO1nV/RfMwVUCdbiyymVZcOCvu5KrkyHY X-Gm-Message-State: AOJu0Yw4ejqtmkyHEhRhoOi+eOcYgPGOnkYkn9o64r2MkrP4Bpa46zye BFIJwAvxEx2XNfKgdMyr9BRLpDfknuvHy42MJ6u+mKruGWKdC49B0lLwFBWgFLb3hmsjDPakzLH UFig9Dw== X-Google-Smtp-Source: AGHT+IG8RJ4TxbVqnYh/ZFFdHmJfxbpZPCmfmXJfgiLHBndDiPsUAFRcqUnZUMNnHTZLEpylkDO/67CKESCA X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a05:690c:64c7:b0:61a:c98c:c2a3 with SMTP id ht7-20020a05690c64c700b0061ac98cc2a3mr623165ywb.10.1713163007703; Sun, 14 Apr 2024 23:36:47 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:24 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-8-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 7/9] perf parse-events: Handle PE_TERM_HW in name_or_raw From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Avoid duplicate logic for name_or_raw and PE_TERM_HW by having a rule to turn PE_TERM_HW into a name_or_raw. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.y | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 14175eee9489..bb9bee5c8a2b 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -605,6 +605,11 @@ event_term } =20 name_or_raw: PE_RAW | PE_NAME | PE_LEGACY_CACHE +| +PE_TERM_HW +{ + $$ =3D $1.str; +} =20 event_term: PE_RAW @@ -646,20 +651,6 @@ name_or_raw '=3D' PE_VALUE $$ =3D term; } | -name_or_raw '=3D' PE_TERM_HW -{ - struct parse_events_term *term; - int err =3D parse_events_term__str(&term, PARSE_EVENTS__TERM_TYPE_USER, - $1, $3.str, &@1, &@3); - - if (err) { - free($1); - free($3.str); - PE_ABORT(err); - } - $$ =3D term; -} -| PE_LEGACY_CACHE { struct parse_events_term *term; @@ -712,18 +703,6 @@ PE_TERM '=3D' name_or_raw $$ =3D term; } | -PE_TERM '=3D' PE_TERM_HW -{ - struct parse_events_term *term; - int err =3D parse_events_term__str(&term, $1, /*config=3D*/NULL, $3.str, = &@1, &@3); - - if (err) { - free($3.str); - PE_ABORT(err); - } - $$ =3D term; -} -| PE_TERM '=3D' PE_TERM { struct parse_events_term *term; --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9625383A3 for ; Mon, 15 Apr 2024 06:36:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163012; cv=none; b=FvxSolHyrCRst+QmBOIydzF0snlvkUgiwU1qJcx+6Y//pZvSaZ39yn8sBNsb2b+0K5FEWeQzKAjVWT9eGGstGlqD0XKXRRD9v3dKKhXRsSSLIjFVvEWNc+IFvvE39RtfWskUMUUju504QwNc2A9YTFdnrDuoSbiR9wKQoxJoZFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163012; c=relaxed/simple; bh=YnUF3ceBTuEWLeyH8vOqzQm1Yqq/JnFb2jhfnx6s9QU=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=eAzVDG5SknwDqBbJL6IRwmUMlQLyiDT8SAc5knxr29yxT22ZF8s+QD0dE2xkpnyQQMIGD9JJkIh2WJYAPav9S7vAyvucUOMZZOP9VQzkoRHxyRPZGaWNi3WBGkxGoPqEgdjzPauwA5iUD4SPBhxkQXlXxOftut1AihpHhD6FvOs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LE1BPs3L; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LE1BPs3L" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc64f63d768so5174236276.2 for ; Sun, 14 Apr 2024 23:36:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163010; x=1713767810; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=SsM8Y1cj6kmrsHpwiXYtXKur/DOQuLkG4gE86ZL8CEk=; b=LE1BPs3LcUYqEEl7YNf0MJSUzYbOnMtITFXjBs0w/nJE4yjQuInhXMvMerZjwquSkA NzX3yJwHs29EN8taGYBGLrELzTH0Kf15s2wO96zuSMMbOkZESkJyFV8rx+WaahyXYT4s nSqAyZySXkYbvjHkSQ+gcej82kbT3h88QPEtmqa0ymaaBLXCAfgkyD66Y/2rjcB+wI1W GBCHKu5luo+nuIw61j6J1P9AeKWcgR8x2AhYaUjKBxbr7YvL1GiW9Uw6pYMUzhX0OSOW 47XT7fDOJ0BB1EniV6eEEGXl6KnDp8oZwL8qBXdwfA77OKE4R007+Bs6HFyPwcAjHOnf CCDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163010; x=1713767810; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SsM8Y1cj6kmrsHpwiXYtXKur/DOQuLkG4gE86ZL8CEk=; b=LD5K0CGoEKGgT9e27F9t713vDblDuAi5/lbSmsw9Qdrt1sKmDYekg+nhrwLkyezeVb XXxHR4P0jUjPGjgGtF1lZyGc6lEmBtI6gY3Wx5gq5xGqAlUZOSVTejNqnqZLBHkhKKrR jt2m2i6H4RxP+P42QOs6Md82gVOE4goV/lED/D3xTyfOaqkclxEgEfR6Drvrp13jjn6h HgL8UUwaXi/ka2wLrfv5+hOb3lcRtk5z+KM0mmHZgQsLrG/0NlaQPI3Ym1VZj8X35d7e 9J34dM27hVIByS7zt4sPxpVL00kBhAR+prYF0Lfx2isuzjbYUG/aFbnUJqfD1UJ4zaFg XJIw== X-Forwarded-Encrypted: i=1; AJvYcCUGNAsYAoh7lpP2QvxAuJ0JqrWSjR5dUrboVLQzJzB+MXRhzGHqjbN+5CZrPaosU4mkM8ar0eCkMsWNcTld274OjoYe89O6B+tobPTZ X-Gm-Message-State: AOJu0YzJzXu7nasHH75E30hstnl4BWWqvna6o1X1IApmGRhmn6WK7GTn PMK2JDUWGdKgqa4BbCpFPlhXaiVvO8r0gEWto5bKuGgoO7Nhpm5fuiSZVsGRZ/uD7uhAe9WYe7x Tz/vfzQ== X-Google-Smtp-Source: AGHT+IGgmCtdEtZrTu/VTbHRcGxy01TSWSnKf6exxI0DVUKXLBA7LgeFtUQlO61tu+Bc2rAGxXCSISNxPEr+ X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a05:6902:1549:b0:dc6:dfd9:d431 with SMTP id r9-20020a056902154900b00dc6dfd9d431mr2983582ybu.1.1713163009901; Sun, 14 Apr 2024 23:36:49 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:25 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-9-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 8/9] perf parse-events: Constify parse_events_add_numeric From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow the term list to be const so that other functions can pass const term lists. Add const as necessary to called functions. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 20 +++++++++++--------- tools/perf/util/parse-events.h | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index f711ad9b18f0..50c4012c737e 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -34,7 +34,8 @@ #ifdef PARSER_DEBUG extern int parse_events_debug; #endif -static int get_config_terms(struct parse_events_terms *head_config, struct= list_head *head_terms); +static int get_config_terms(const struct parse_events_terms *head_config, + struct list_head *head_terms); static int parse_events_terms__copy(const struct parse_events_terms *src, struct parse_events_terms *dest); =20 @@ -154,7 +155,7 @@ const char *event_type(int type) return "unknown"; } =20 -static char *get_config_str(struct parse_events_terms *head_terms, +static char *get_config_str(const struct parse_events_terms *head_terms, enum parse_events__term_type type_term) { struct parse_events_term *term; @@ -169,12 +170,12 @@ static char *get_config_str(struct parse_events_terms= *head_terms, return NULL; } =20 -static char *get_config_metric_id(struct parse_events_terms *head_terms) +static char *get_config_metric_id(const struct parse_events_terms *head_te= rms) { return get_config_str(head_terms, PARSE_EVENTS__TERM_TYPE_METRIC_ID); } =20 -static char *get_config_name(struct parse_events_terms *head_terms) +static char *get_config_name(const struct parse_events_terms *head_terms) { return get_config_str(head_terms, PARSE_EVENTS__TERM_TYPE_NAME); } @@ -358,7 +359,7 @@ static int config_term_common(struct perf_event_attr *a= ttr, struct parse_events_term *term, struct parse_events_error *err); static int config_attr(struct perf_event_attr *attr, - struct parse_events_terms *head, + const struct parse_events_terms *head, struct parse_events_error *err, config_term_func_t config_term); =20 @@ -1107,7 +1108,7 @@ static int config_term_tracepoint(struct perf_event_a= ttr *attr, #endif =20 static int config_attr(struct perf_event_attr *attr, - struct parse_events_terms *head, + const struct parse_events_terms *head, struct parse_events_error *err, config_term_func_t config_term) { @@ -1120,7 +1121,8 @@ static int config_attr(struct perf_event_attr *attr, return 0; } =20 -static int get_config_terms(struct parse_events_terms *head_config, struct= list_head *head_terms) +static int get_config_terms(const struct parse_events_terms *head_config, + struct list_head *head_terms) { #define ADD_CONFIG_TERM(__type, __weak) \ struct evsel_config_term *__t; \ @@ -1324,7 +1326,7 @@ int parse_events_add_tracepoint(struct list_head *lis= t, int *idx, static int __parse_events_add_numeric(struct parse_events_state *parse_sta= te, struct list_head *list, struct perf_pmu *pmu, u32 type, u32 extended_type, - u64 config, struct parse_events_terms *head_config) + u64 config, const struct parse_events_terms *head_config) { struct perf_event_attr attr; LIST_HEAD(config_terms); @@ -1360,7 +1362,7 @@ static int __parse_events_add_numeric(struct parse_ev= ents_state *parse_state, int parse_events_add_numeric(struct parse_events_state *parse_state, struct list_head *list, u32 type, u64 config, - struct parse_events_terms *head_config, + const struct parse_events_terms *head_config, bool wildcard) { struct perf_pmu *pmu =3D NULL; diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index db47913e54bc..5005782766e9 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -196,7 +196,7 @@ int parse_events_add_tracepoint(struct list_head *list,= int *idx, int parse_events_add_numeric(struct parse_events_state *parse_state, struct list_head *list, u32 type, u64 config, - struct parse_events_terms *head_config, + const struct parse_events_terms *head_config, bool wildcard); int parse_events_add_tool(struct parse_events_state *parse_state, struct list_head *list, --=20 2.44.0.683.g7961c838ac-goog From nobody Fri Feb 13 08:17:58 2026 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 626403A8E4 for ; Mon, 15 Apr 2024 06:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163016; cv=none; b=qT/33qIp8pvJJB1xOiN68nfvxNDI0xBKoKsHfUROq3XwKFwUIIiwnDgWX4ZKkkGvQvatqNC54YgRAe4ao/l8m+D49xtHcXRVIO+j9HuDawdaXH1PKzFOGYIYSGdOEw9iViG/HutBWi4OKMWwqmW0LLQuhvYUBZjuW6CVecqs5fM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713163016; c=relaxed/simple; bh=w65gh5BACvoXwLzkxFuRBokMMG+4qUIFVzfW25iKCgQ=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=RJa2pWZ2qEYPqbTn7zUyJEEpqTYAQ7cm79ZYo02dPmZWCTxGlK+CWMx5RhVZsy4tstpp/LvRjPjPs1RnK1cHtyyAVDKphT/BedvHyFGXoo/TsOkIidMzoRlLUiQV0qUMoC2lAbkBjQ/EyV2zy1EmRndOwYQGH5qlXqXU/8dRm1E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Vl6fmYIM; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Vl6fmYIM" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-ddaf165a8d9so4495521276.1 for ; Sun, 14 Apr 2024 23:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1713163012; x=1713767812; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=C2zYz2p9SuP23YkC/Puz1S5ccaK/qlF1ObCAaC2jTYw=; b=Vl6fmYIMv0ua3r0utyJyJDDZkan2FkrFpAxRrYYSslDqsXNbCDg6Mb+9DeOMMl3U30 5lDfXheNHNRo7BEeYFBxjjohYlW1mAt3ASaK8k5qJ2AZq3dnychaamNKSUHWGsX0W+N6 OEoQp/bArLt2L4fDVSM6VqTD59HdkGHHsa/54+cjfrHLxSwLMaIs3+rSBm3I1mpu0PRO 90+qF9G68slnTqGFytk67pVtHiwNFRW30oIkBbzxdWg9vVcQMoeJHDcT4M/Gtu8tBUQS g9D3Lq0GJYJoUFhcf1F/C91xWRgF5NTkH5hN8TFaZ/jzDp04o2nve3o8kQ44+zv6S3iE jTJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713163012; x=1713767812; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C2zYz2p9SuP23YkC/Puz1S5ccaK/qlF1ObCAaC2jTYw=; b=N1hbzPYnCPxKtqzA38cuTWwrnSjyVQgSajpLBcY8AhXARNyD4vlA/eO3iItjljUm70 ACpJmRVKjoj6EX2nLcHloGE4gwlZ16VefR6x0dg2ocFIPliGWAYJ//TJFk8jfeYfj2EO EfVIejwUuYwl7TPZLohlr6VtsqkQvAJjxZvspXsK8dgjSFaU+JsrARyqKsQkc+e4X87i 49a+GhqEfKCY09jpLX4j1k1qeC7V+VjUwZQsllpTGE4dWYjZWKYhifG06jJ3avHAS1dh VAZnc86cyeucmyzVW7oLcnbYGsEG2cw4unYU4JhmQWhn23cik2qdhFDOvORqd/Xy9tGd U0+Q== X-Forwarded-Encrypted: i=1; AJvYcCU9XFpFw+JYIV/l9M2zuej3hcpGea5lcwguztm4hq7gujl0iEJ+/25HOZI3lADE6IcthCvo2nPTmHiMcGWnQIYPe7iOmZ7S1HBPXHl1 X-Gm-Message-State: AOJu0YypxNoyh/aNx8spxyZcBtKQdkHj6ucizH+srM5d5DDy2UHb09xJ ELCngIKedmbPHxJv4JaqSEaWuDg062Ijvgkh7C0r1AZADNKbPy7T6qvg49HXGBMS6Y3I74rpNxb Vt7IzuQ== X-Google-Smtp-Source: AGHT+IFc8oupYxi0XroaQS1qPNvf09WVo0Z2C9KWMqj3BnRf4KigO+cieQFWNrE8mh6AO/gRMa+AxYq+tlzc X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:f304:d776:d707:4b57]) (user=irogers job=sendgmr) by 2002:a05:6902:1207:b0:dc8:27e6:cde1 with SMTP id s7-20020a056902120700b00dc827e6cde1mr1092814ybu.5.1713163012522; Sun, 14 Apr 2024 23:36:52 -0700 (PDT) Date: Sun, 14 Apr 2024 23:36:26 -0700 In-Reply-To: <20240415063626.453987-1-irogers@google.com> Message-Id: <20240415063626.453987-10-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240415063626.453987-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.683.g7961c838ac-goog Subject: [PATCH v1 9/9] perf parse-events: Prefer sysfs/json hardware events over legacy From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, Atish Patra , linux-riscv@lists.infradead.org, Beeman Strong Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It was requested that RISC-V be able to add events to the perf tool so the PMU driver didn't need to map legacy events to config encodings: https://lore.kernel.org/lkml/20240217005738.3744121-1-atishp@rivosinc.com/ This change makes the priority of events specified without a PMU the same as those specified with a PMU, namely sysfs and json events are checked first before using the legacy encoding. The hw_term is made more generic as a hardware_event that encodes a pair of string and int value, allowing parse_events_multi_pmu_add to fall back on a known encoding when the sysfs/json adding fails for core events. As this covers PE_VALUE_SYM_HW, that token is removed and related code simplified. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 31 ++++++++++---- tools/perf/util/parse-events.h | 2 +- tools/perf/util/parse-events.l | 76 +++++++++++++++++----------------- tools/perf/util/parse-events.y | 62 +++++++++++++++++---------- 4 files changed, 103 insertions(+), 68 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 50c4012c737e..71b0c5d518f1 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1541,7 +1541,7 @@ static int parse_events_add_pmu(struct parse_events_s= tate *parse_state, } =20 int parse_events_multi_pmu_add(struct parse_events_state *parse_state, - const char *event_name, + const char *event_name, u64 hw_config, const struct parse_events_terms *const_parsed_terms, struct list_head **listp, void *loc_) { @@ -1549,8 +1549,8 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, struct list_head *list =3D NULL; struct perf_pmu *pmu =3D NULL; YYLTYPE *loc =3D loc_; - int ok =3D 0; - const char *config; + int ok =3D 0, core_ok =3D 0; + const char *tmp; struct parse_events_terms parsed_terms; =20 *listp =3D NULL; @@ -1563,15 +1563,15 @@ int parse_events_multi_pmu_add(struct parse_events_= state *parse_state, return ret; } =20 - config =3D strdup(event_name); - if (!config) + tmp =3D strdup(event_name); + if (!tmp) goto out_err; =20 if (parse_events_term__num(&term, PARSE_EVENTS__TERM_TYPE_USER, - config, /*num=3D*/1, /*novalue=3D*/true, + tmp, /*num=3D*/1, /*novalue=3D*/true, loc, /*loc_val=3D*/NULL) < 0) { - zfree(&config); + zfree(&tmp); goto out_err; } list_add_tail(&term->list, &parsed_terms.terms); @@ -1602,6 +1602,8 @@ int parse_events_multi_pmu_add(struct parse_events_st= ate *parse_state, pr_debug("%s -> %s/%s/\n", event_name, pmu->name, sb.buf); strbuf_release(&sb); ok++; + if (pmu->is_core) + core_ok++; } } =20 @@ -1618,6 +1620,18 @@ int parse_events_multi_pmu_add(struct parse_events_s= tate *parse_state, } } =20 + if (hw_config !=3D PERF_COUNT_HW_MAX && !core_ok) { + /* + * The event wasn't found on core PMUs but it has a hardware + * config version to try. + */ + if (!parse_events_add_numeric(parse_state, list, + PERF_TYPE_HARDWARE, hw_config, + const_parsed_terms, + /*wildcard=3D*/true)) + ok++; + } + out_err: parse_events_terms__exit(&parsed_terms); if (ok) @@ -1670,7 +1684,8 @@ int parse_events_multi_pmu_add_or_add_pmu(struct pars= e_events_state *parse_state =20 /* Failure to add, assume event_or_pmu is an event name. */ zfree(listp); - if (!parse_events_multi_pmu_add(parse_state, event_or_pmu, const_parsed_t= erms, listp, loc)) + if (!parse_events_multi_pmu_add(parse_state, event_or_pmu, PERF_COUNT_HW_= MAX, + const_parsed_terms, listp, loc)) return 0; =20 if (asprintf(&help, "Unable to find PMU or event on a PMU of '%s'", event= _or_pmu) < 0) diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 5005782766e9..7e5afad3feb8 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -215,7 +215,7 @@ struct evsel *parse_events__add_event(int idx, struct p= erf_event_attr *attr, struct perf_pmu *pmu); =20 int parse_events_multi_pmu_add(struct parse_events_state *parse_state, - const char *event_name, + const char *event_name, u64 hw_config, const struct parse_events_terms *const_parsed_terms, struct list_head **listp, void *loc); =20 diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index e86c45675e1d..6fe37003ab7b 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l @@ -100,12 +100,12 @@ do { \ yyless(0); \ } while (0) =20 -static int sym(yyscan_t scanner, int type, int config) +static int sym(yyscan_t scanner, int config) { YYSTYPE *yylval =3D parse_events_get_lval(scanner); =20 - yylval->num =3D (type << 16) + config; - return type =3D=3D PERF_TYPE_HARDWARE ? PE_VALUE_SYM_HW : PE_VALUE_SYM_SW; + yylval->num =3D config; + return PE_VALUE_SYM_SW; } =20 static int tool(yyscan_t scanner, enum perf_tool_event event) @@ -124,13 +124,13 @@ static int term(yyscan_t scanner, enum parse_events__= term_type type) return PE_TERM; } =20 -static int hw_term(yyscan_t scanner, int config) +static int hw(yyscan_t scanner, int config) { YYSTYPE *yylval =3D parse_events_get_lval(scanner); char *text =3D parse_events_get_text(scanner); =20 - yylval->hardware_term.str =3D strdup(text); - yylval->hardware_term.num =3D PERF_TYPE_HARDWARE + config; + yylval->hardware_event.str =3D strdup(text); + yylval->hardware_event.num =3D config; return PE_TERM_HW; } =20 @@ -246,16 +246,16 @@ percore { return term(yyscanner, PARSE_EVENTS__TERM= _TYPE_PERCORE); } aux-output { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_OUTPUT); } aux-sample-size { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_AUX_SAMP= LE_SIZE); } metric-id { return term(yyscanner, PARSE_EVENTS__TERM_TYPE_METRIC_ID); } -cpu-cycles|cycles { return hw_term(yyscanner, PERF_COUNT_HW_CPU_CYCLES)= ; } -stalled-cycles-frontend|idle-cycles-frontend { return hw_term(yyscanner, P= ERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } -stalled-cycles-backend|idle-cycles-backend { return hw_term(yyscanner, PER= F_COUNT_HW_STALLED_CYCLES_BACKEND); } -instructions { return hw_term(yyscanner, PERF_COUNT_HW_INSTRUCTIONS); } -cache-references { return hw_term(yyscanner, PERF_COUNT_HW_CACHE_REFERE= NCES); } -cache-misses { return hw_term(yyscanner, PERF_COUNT_HW_CACHE_MISSES); } -branch-instructions|branches { return hw_term(yyscanner, PERF_COUNT_HW_B= RANCH_INSTRUCTIONS); } -branch-misses { return hw_term(yyscanner, PERF_COUNT_HW_BRANCH_MISSES)= ; } -bus-cycles { return hw_term(yyscanner, PERF_COUNT_HW_BUS_CYCLES); } -ref-cycles { return hw_term(yyscanner, PERF_COUNT_HW_REF_CPU_CYCLES); } +cpu-cycles|cycles { return hw(yyscanner, PERF_COUNT_HW_CPU_CYCLES); } +stalled-cycles-frontend|idle-cycles-frontend { return hw(yyscanner, PERF_C= OUNT_HW_STALLED_CYCLES_FRONTEND); } +stalled-cycles-backend|idle-cycles-backend { return hw(yyscanner, PERF_COU= NT_HW_STALLED_CYCLES_BACKEND); } +instructions { return hw(yyscanner, PERF_COUNT_HW_INSTRUCTIONS); } +cache-references { return hw(yyscanner, PERF_COUNT_HW_CACHE_REFERENCES)= ; } +cache-misses { return hw(yyscanner, PERF_COUNT_HW_CACHE_MISSES); } +branch-instructions|branches { return hw(yyscanner, PERF_COUNT_HW_BRANCH= _INSTRUCTIONS); } +branch-misses { return hw(yyscanner, PERF_COUNT_HW_BRANCH_MISSES); } +bus-cycles { return hw(yyscanner, PERF_COUNT_HW_BUS_CYCLES); } +ref-cycles { return hw(yyscanner, PERF_COUNT_HW_REF_CPU_CYCLES); } r{num_raw_hex} { return str(yyscanner, PE_RAW); } r0x{num_raw_hex} { return str(yyscanner, PE_RAW); } , { return ','; } @@ -299,31 +299,31 @@ r0x{num_raw_hex} { return str(yyscanner, PE_RAW); } <> { BEGIN(INITIAL); } } =20 -cpu-cycles|cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUN= T_HW_CPU_CYCLES); } -stalled-cycles-frontend|idle-cycles-frontend { return sym(yyscanner, PERF_= TYPE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND); } -stalled-cycles-backend|idle-cycles-backend { return sym(yyscanner, PERF_TY= PE_HARDWARE, PERF_COUNT_HW_STALLED_CYCLES_BACKEND); } -instructions { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW= _INSTRUCTIONS); } -cache-references { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT= _HW_CACHE_REFERENCES); } -cache-misses { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW= _CACHE_MISSES); } -branch-instructions|branches { return sym(yyscanner, PERF_TYPE_HARDWARE,= PERF_COUNT_HW_BRANCH_INSTRUCTIONS); } -branch-misses { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_H= W_BRANCH_MISSES); } -bus-cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_B= US_CYCLES); } -ref-cycles { return sym(yyscanner, PERF_TYPE_HARDWARE, PERF_COUNT_HW_R= EF_CPU_CYCLES); } -cpu-clock { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_CP= U_CLOCK); } -task-clock { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_T= ASK_CLOCK); } -page-faults|faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COU= NT_SW_PAGE_FAULTS); } -minor-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW= _PAGE_FAULTS_MIN); } -major-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW= _PAGE_FAULTS_MAJ); } -context-switches|cs { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_CO= UNT_SW_CONTEXT_SWITCHES); } -cpu-migrations|migrations { return sym(yyscanner, PERF_TYPE_SOFTWARE, PE= RF_COUNT_SW_CPU_MIGRATIONS); } -alignment-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT= _SW_ALIGNMENT_FAULTS); } -emulation-faults { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT= _SW_EMULATION_FAULTS); } -dummy { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_DUMMY= ); } +cpu-cycles|cycles { return hw(yyscanner, PERF_COUNT_HW_CPU_CYCLES); } +stalled-cycles-frontend|idle-cycles-frontend { return hw(yyscanner, PERF_C= OUNT_HW_STALLED_CYCLES_FRONTEND); } +stalled-cycles-backend|idle-cycles-backend { return hw(yyscanner, PERF_COU= NT_HW_STALLED_CYCLES_BACKEND); } +instructions { return hw(yyscanner, PERF_COUNT_HW_INSTRUCTIONS); } +cache-references { return hw(yyscanner, PERF_COUNT_HW_CACHE_REFERENCES)= ; } +cache-misses { return hw(yyscanner, PERF_COUNT_HW_CACHE_MISSES); } +branch-instructions|branches { return hw(yyscanner, PERF_COUNT_HW_BRANCH= _INSTRUCTIONS); } +branch-misses { return hw(yyscanner, PERF_COUNT_HW_BRANCH_MISSES); } +bus-cycles { return hw(yyscanner, PERF_COUNT_HW_BUS_CYCLES); } +ref-cycles { return hw(yyscanner, PERF_COUNT_HW_REF_CPU_CYCLES); } +cpu-clock { return sym(yyscanner, PERF_COUNT_SW_CPU_CLOCK); } +task-clock { return sym(yyscanner, PERF_COUNT_SW_TASK_CLOCK); } +page-faults|faults { return sym(yyscanner, PERF_COUNT_SW_PAGE_FAULTS); } +minor-faults { return sym(yyscanner, PERF_COUNT_SW_PAGE_FAULTS_MIN); } +major-faults { return sym(yyscanner, PERF_COUNT_SW_PAGE_FAULTS_MAJ); } +context-switches|cs { return sym(yyscanner, PERF_COUNT_SW_CONTEXT_SWITC= HES); } +cpu-migrations|migrations { return sym(yyscanner, PERF_COUNT_SW_CPU_MIGR= ATIONS); } +alignment-faults { return sym(yyscanner, PERF_COUNT_SW_ALIGNMENT_FAULTS= ); } +emulation-faults { return sym(yyscanner, PERF_COUNT_SW_EMULATION_FAULTS= ); } +dummy { return sym(yyscanner, PERF_COUNT_SW_DUMMY); } duration_time { return tool(yyscanner, PERF_TOOL_DURATION_TIME); } user_time { return tool(yyscanner, PERF_TOOL_USER_TIME); } system_time { return tool(yyscanner, PERF_TOOL_SYSTEM_TIME); } -bpf-output { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT_SW_B= PF_OUTPUT); } -cgroup-switches { return sym(yyscanner, PERF_TYPE_SOFTWARE, PERF_COUNT= _SW_CGROUP_SWITCHES); } +bpf-output { return sym(yyscanner, PERF_COUNT_SW_BPF_OUTPUT); } +cgroup-switches { return sym(yyscanner, PERF_COUNT_SW_CGROUP_SWITCHES)= ; } =20 {lc_type} { return str(yyscanner, PE_LEGACY_CACHE); } {lc_type}-{lc_op_result} { return str(yyscanner, PE_LEGACY_CACHE); } diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index bb9bee5c8a2b..ebac73786065 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -55,7 +55,7 @@ static void free_list_evsel(struct list_head* list_evsel) %} =20 %token PE_START_EVENTS PE_START_TERMS -%token PE_VALUE PE_VALUE_SYM_HW PE_VALUE_SYM_SW PE_TERM +%token PE_VALUE PE_VALUE_SYM_SW PE_TERM %token PE_VALUE_SYM_TOOL %token PE_EVENT_NAME %token PE_RAW PE_NAME @@ -66,11 +66,9 @@ static void free_list_evsel(struct list_head* list_evsel) %token PE_DRV_CFG_TERM %token PE_TERM_HW %type PE_VALUE -%type PE_VALUE_SYM_HW %type PE_VALUE_SYM_SW %type PE_VALUE_SYM_TOOL %type PE_TERM -%type value_sym %type PE_RAW %type PE_NAME %type PE_LEGACY_CACHE @@ -87,6 +85,7 @@ static void free_list_evsel(struct list_head* list_evsel) %type opt_pmu_config %destructor { parse_events_terms__delete ($$); } %type event_pmu +%type event_legacy_hardware %type event_legacy_symbol %type event_legacy_cache %type event_legacy_mem @@ -104,8 +103,8 @@ static void free_list_evsel(struct list_head* list_evse= l) %destructor { free_list_evsel ($$); } %type tracepoint_name %destructor { free ($$.sys); free ($$.event); } -%type PE_TERM_HW -%destructor { free ($$.str); } +%type PE_TERM_HW +%destructor { free ($$.str); } =20 %union { @@ -119,10 +118,10 @@ static void free_list_evsel(struct list_head* list_ev= sel) char *sys; char *event; } tracepoint_name; - struct hardware_term { + struct hardware_event { char *str; u64 num; - } hardware_term; + } hardware_event; } %% =20 @@ -263,6 +262,7 @@ PE_EVENT_NAME event_def event_def =20 event_def: event_pmu | + event_legacy_hardware | event_legacy_symbol | event_legacy_cache sep_dc | event_legacy_mem sep_dc | @@ -291,7 +291,7 @@ PE_NAME sep_dc struct list_head *list; int err; =20 - err =3D parse_events_multi_pmu_add(_parse_state, $1, NULL, &list, &@1); + err =3D parse_events_multi_pmu_add(_parse_state, $1, PERF_COUNT_HW_MAX, N= ULL, &list, &@1); if (err < 0) { struct parse_events_state *parse_state =3D _parse_state; struct parse_events_error *error =3D parse_state->error; @@ -307,24 +307,45 @@ PE_NAME sep_dc $$ =3D list; } =20 -value_sym: -PE_VALUE_SYM_HW +event_legacy_hardware: +PE_TERM_HW opt_pmu_config +{ + /* List of created evsels. */ + struct list_head *list =3D NULL; + int err =3D parse_events_multi_pmu_add(_parse_state, $1.str, $1.num, $2, = &list, &@1); + + free($1.str); + parse_events_terms__delete($2); + if (err) + PE_ABORT(err); + + $$ =3D list; +} | -PE_VALUE_SYM_SW +PE_TERM_HW sep_dc +{ + struct list_head *list; + int err; + + err =3D parse_events_multi_pmu_add(_parse_state, $1.str, $1.num, NULL, &l= ist, &@1); + free($1.str); + if (err) + PE_ABORT(err); + $$ =3D list; +} =20 event_legacy_symbol: -value_sym '/' event_config '/' +PE_VALUE_SYM_SW '/' event_config '/' { struct list_head *list; - int type =3D $1 >> 16; - int config =3D $1 & 255; int err; - bool wildcard =3D (type =3D=3D PERF_TYPE_HARDWARE || type =3D=3D PERF_TYP= E_HW_CACHE); =20 list =3D alloc_list(); if (!list) YYNOMEM; - err =3D parse_events_add_numeric(_parse_state, list, type, config, $3, wi= ldcard); + err =3D parse_events_add_numeric(_parse_state, list, + /*type=3D*/PERF_TYPE_SOFTWARE, /*config=3D*/$1, + $3, /*wildcard=3D*/false); parse_events_terms__delete($3); if (err) { free_list_evsel(list); @@ -333,18 +354,17 @@ value_sym '/' event_config '/' $$ =3D list; } | -value_sym sep_slash_slash_dc +PE_VALUE_SYM_SW sep_slash_slash_dc { struct list_head *list; - int type =3D $1 >> 16; - int config =3D $1 & 255; - bool wildcard =3D (type =3D=3D PERF_TYPE_HARDWARE || type =3D=3D PERF_TYP= E_HW_CACHE); int err; =20 list =3D alloc_list(); if (!list) YYNOMEM; - err =3D parse_events_add_numeric(_parse_state, list, type, config, /*head= _config=3D*/NULL, wildcard); + err =3D parse_events_add_numeric(_parse_state, list, + /*type=3D*/PERF_TYPE_SOFTWARE, /*config=3D*/$1, + /*head_config=3D*/NULL, /*wildcard=3D*/false); if (err) PE_ABORT(err); $$ =3D list; --=20 2.44.0.683.g7961c838ac-goog