From nobody Tue Feb 10 06:52:27 2026 Received: from submarine.notk.org (62-210-214-84.rev.poneytelecom.eu [62.210.214.84]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9E01114A96; Sun, 5 May 2024 11:14:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.210.214.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907672; cv=none; b=hg0VTWRbJBDOX/8ab2+GmPsnh50NU3hz87jQDCBQg5AY7K2FPeQsvgYn6n/rPOHaPCDGSJiNiESSuU8Fdj2YyP3QUP9OGCtz4+AzubuwPVp5ZRITXguP60oVvklC+ZSzyluOkv9yt6dDuLvnkYSQYopbz6lseUQhALQyIRppRqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907672; c=relaxed/simple; bh=gXJdObYymSv+xu5zY8dz7G2l4mbXEFOwz6QHuVB14dg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IfUkZFInjFQyQ0zS5EUtYzlcSQui4IrJ3dnBfloqdKiqwSWbuXBiQ8+V4y1V0SK0KEyI8htd6ap9jxbZdFBVzvzhpeTI8TqHO5Y6QVpsiiIrzOdDv30cbKN/Y7XIdqI5IPEJNhVjWgcz4u/OshDbiusXojEFDBjKRDpnqKAWUs4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org; spf=pass smtp.mailfrom=codewreck.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=zY1DDpmt; arc=none smtp.client-ip=62.210.214.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codewreck.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="zY1DDpmt" Received: from gaia.codewreck.org (localhost [127.0.0.1]) by submarine.notk.org (Postfix) with ESMTPS id 74B6014C2DC; Sun, 5 May 2024 13:14:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1714907663; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=i9IsIqe9yWCkF+5W0tmJJpm3iiYQWxxVo7wE2Yz9kF0=; b=zY1DDpmtB/4s5mSi/E4q6RjnGSGugZCcrHNgT0AZMwQ/lfPWjnih1WOqLxdM1XAa9WjEnK UMv/uVvzNSYzFII/PF2iss0X8eeRZuVK+/MvSkv/D+8LMoO9mr+vfiulKKBnYxqusFmajq NXfTVNhyluMY3qHuGPDNtJwfQuyRIVL67fig4QVjPr2AoORS40H/5+AHz6E6DfAtDgNY1S NmoSFoTQNNy6WMkiPhIsx+DOzQmHpmVAoZnYnIm/uZEkGrihweuxnnhyqYeotmgIqffjEX SRSCCSaoTc6FnaLUhJFwGQrFWHGh3tFg2TAdc7fNpQjcVxZ3dFt49yzvsTNNYg== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id ed3b291f; Sun, 5 May 2024 11:14:12 +0000 (UTC) From: Dominique Martinet Date: Sun, 05 May 2024 20:13:57 +0900 Subject: [PATCH v2 1/3] perf parse-events: pass parse_state to add_tracepoint Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240505-perf_digit-v2-1-6ece307fdaad@codewreck.org> References: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> In-Reply-To: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> To: Arnaldo Carvalho de Melo , Jiri Olsa , Peter Zijlstra , Ingo Molnar , Namhyung Kim , Mark Rutland , Alexander Shishkin , Ian Rogers , Adrian Hunter Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dominique Martinet X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=6034; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=gXJdObYymSv+xu5zY8dz7G2l4mbXEFOwz6QHuVB14dg=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmN2oDqD59jkZvW5G/2dikehsD4v0MNEgObfnuZ sFtJBti/MKJAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZjdqAwAKCRCrTpvsapjm cMYHD/9NltkR4wwvRVz8vJL7hLdW9/u6MWfGtQhY5n5D2ezJ+kF54wDVt/Rk3otB7V5fawH54Rp xAive80s/ED9Tchw2RTrKcuJDUZMlbE1UdCV/sfNJnXx+YZRwX/4e865+2ZRSH7gC4t47CR8HSl 1U4JJ7tNxR6Jf1V4g2wJ4s298aemo2TNwJIPrDWYOnhUrnOds/FINurhd23UkOfOV5QpXOnpNTX JrOhZ5NmKMY+KE1eWu4G1nF5fwojqCAsA/4uIpMk4RfllGpGWWAwnBi91eYsNtyXV7VU4FpLmB7 n5+2+5SGWngylaKQilI1geKlnzL5UxBVLoBqUqCu5pVZY/zjSguMzbSl4AghengikNYzog88XuN jvvss+Br9u0dn7wCRiSKd1eAXhiGDdSBKEqwX/pZnEIjXBK8Q2ptqOF6BEYlCOFM8AACHJV6Fwk BvFM6KeHq8wIWadDkcllVgc3hMiNCaAMw7o/tyx6r8X8sW7mO8+b/JZuNkxwfuHW8c4sQXMQady vvL8msEo8hQY+WSIE8qb7f1fGe8vtD/jCvgMa5VkGLKEnvgHzypGZib/1jgAMijj6VMW5EaeAri 6QETa/0Zdc/K00fjr6W1Lq/aqxhG3x7WFlyNiTTiKd31imHkNPf0KIy1WVOQXLzSQLMEM3uRwYn bRahdOQ/JUC/eGA== X-Developer-Key: i=asmadeus@codewreck.org; a=openpgp; fpr=B894379F662089525B3FB1B9333F1F391BBBB00A The next patch will add another flag to parse_state that we will want to pass to evsel__nwetp_idx(), so pass the whole parse_state all the way down instead of giving only the index Originally-by: Jiri Olsa Signed-off-by: Dominique Martinet Reviewed-by: Ian Rogers --- tools/perf/util/parse-events.c | 31 ++++++++++++++++++------------- tools/perf/util/parse-events.h | 3 ++- tools/perf/util/parse-events.y | 2 +- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 6f8b0fa17689..6e8cba03f0ac 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -519,13 +519,14 @@ static void tracepoint_error(struct parse_events_erro= r *e, int err, parse_events_error__handle(e, column, strdup(str), strdup(help)); } =20 -static int add_tracepoint(struct list_head *list, int *idx, +static int add_tracepoint(struct parse_events_state *parse_state, + struct list_head *list, const char *sys_name, const char *evt_name, struct parse_events_error *err, struct parse_events_terms *head_config, void *loc_) { YYLTYPE *loc =3D loc_; - struct evsel *evsel =3D evsel__newtp_idx(sys_name, evt_name, (*idx)++); + struct evsel *evsel =3D evsel__newtp_idx(sys_name, evt_name, parse_state-= >idx++); =20 if (IS_ERR(evsel)) { tracepoint_error(err, PTR_ERR(evsel), sys_name, evt_name, loc->first_col= umn); @@ -544,7 +545,8 @@ static int add_tracepoint(struct list_head *list, int *= idx, return 0; } =20 -static int add_tracepoint_multi_event(struct list_head *list, int *idx, +static int add_tracepoint_multi_event(struct parse_events_state *parse_sta= te, + struct list_head *list, const char *sys_name, const char *evt_name, struct parse_events_error *err, struct parse_events_terms *head_config, YYLTYPE *loc) @@ -578,7 +580,7 @@ static int add_tracepoint_multi_event(struct list_head = *list, int *idx, =20 found++; =20 - ret =3D add_tracepoint(list, idx, sys_name, evt_ent->d_name, + ret =3D add_tracepoint(parse_state, list, sys_name, evt_ent->d_name, err, head_config, loc); } =20 @@ -592,19 +594,21 @@ static int add_tracepoint_multi_event(struct list_hea= d *list, int *idx, return ret; } =20 -static int add_tracepoint_event(struct list_head *list, int *idx, +static int add_tracepoint_event(struct parse_events_state *parse_state, + struct list_head *list, const char *sys_name, const char *evt_name, struct parse_events_error *err, struct parse_events_terms *head_config, YYLTYPE *loc) { return strpbrk(evt_name, "*?") ? - add_tracepoint_multi_event(list, idx, sys_name, evt_name, + add_tracepoint_multi_event(parse_state, list, sys_name, evt_name, err, head_config, loc) : - add_tracepoint(list, idx, sys_name, evt_name, + add_tracepoint(parse_state, list, sys_name, evt_name, err, head_config, loc); } =20 -static int add_tracepoint_multi_sys(struct list_head *list, int *idx, +static int add_tracepoint_multi_sys(struct parse_events_state *parse_state, + struct list_head *list, const char *sys_name, const char *evt_name, struct parse_events_error *err, struct parse_events_terms *head_config, YYLTYPE *loc) @@ -630,7 +634,7 @@ static int add_tracepoint_multi_sys(struct list_head *l= ist, int *idx, if (!strglobmatch(events_ent->d_name, sys_name)) continue; =20 - ret =3D add_tracepoint_event(list, idx, events_ent->d_name, + ret =3D add_tracepoint_event(parse_state, list, events_ent->d_name, evt_name, err, head_config, loc); } =20 @@ -1266,7 +1270,8 @@ static int get_config_chgs(struct perf_pmu *pmu, stru= ct parse_events_terms *head return 0; } =20 -int parse_events_add_tracepoint(struct list_head *list, int *idx, +int parse_events_add_tracepoint(struct parse_events_state *parse_state, + struct list_head *list, const char *sys, const char *event, struct parse_events_error *err, struct parse_events_terms *head_config, void *loc_) @@ -1282,14 +1287,14 @@ int parse_events_add_tracepoint(struct list_head *l= ist, int *idx, } =20 if (strpbrk(sys, "*?")) - return add_tracepoint_multi_sys(list, idx, sys, event, + return add_tracepoint_multi_sys(parse_state, list, sys, event, err, head_config, loc); else - return add_tracepoint_event(list, idx, sys, event, + return add_tracepoint_event(parse_state, list, sys, event, err, head_config, loc); #else + (void)parse_state; (void)list; - (void)idx; (void)sys; (void)event; (void)head_config; diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 809359e8544e..fd55a154ceff 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -189,7 +189,8 @@ int parse_events_terms__to_strbuf(const struct parse_ev= ents_terms *terms, struct int parse_events__modifier_event(struct list_head *list, char *str, bool a= dd); int parse_events__modifier_group(struct list_head *list, char *event_mod); int parse_events_name(struct list_head *list, const char *name); -int parse_events_add_tracepoint(struct list_head *list, int *idx, +int parse_events_add_tracepoint(struct parse_events_state *parse_state, + struct list_head *list, const char *sys, const char *event, struct parse_events_error *error, struct parse_events_terms *head_config, void *loc); diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index d70f5d84af92..0bab4263f8e3 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -537,7 +537,7 @@ tracepoint_name opt_event_config if (!list) YYNOMEM; =20 - err =3D parse_events_add_tracepoint(list, &parse_state->idx, $1.sys, $1.e= vent, + err =3D parse_events_add_tracepoint(parse_state, list, $1.sys, $1.event, error, $2, &@1); =20 parse_events_terms__delete($2); --=20 2.44.0 From nobody Tue Feb 10 06:52:27 2026 Received: from submarine.notk.org (62-210-214-84.rev.poneytelecom.eu [62.210.214.84]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9DFD814A84; Sun, 5 May 2024 11:14:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.210.214.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907673; cv=none; b=AGaulBvV7YLg2N7yxYV2MUXazoB7NUOo2qI0LZbA7q4qVjKyfRxwZHeyO9aS3ZMEyJ/l8mVFAGzt6wDQxtCDjL6lPCnTww+0WbO7FM99+3/pFlSmHu/Z4Oi0cqa+I7BqRm217SWXPKZiNBRa1bthSJHY01WB2g4UIGK0stFokyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907673; c=relaxed/simple; bh=JnlCDmRuutK/KzCo+rcyudV22smr9ryS2UjA5s2k2eg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GA91eQ8l+YOnCvSpLKhlEh4F+lhFt8kN1fmiDEgQ5puNO10rOMXVnWQGD0T2R2/XvYjN2O1PHByzccwQbFFXXmSRKikleHk1QORWu2e0UfO7pdGN5HH2WCmS5SdyENr9uxA5qMtsWRpyiZ1L5tYcp4mG0APmxckNoqTCXTi7gMc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org; spf=pass smtp.mailfrom=codewreck.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=weErkWGL; arc=none smtp.client-ip=62.210.214.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codewreck.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="weErkWGL" Received: from gaia.codewreck.org (localhost [127.0.0.1]) by submarine.notk.org (Postfix) with ESMTPS id 00DBA14C2DD; Sun, 5 May 2024 13:14:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1714907664; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9tpo+09nwmv+KYpQer08XkkTaUsvh9qO4C4ZH9XHLgc=; b=weErkWGLkv2gh0SVhAYTEyTO3fRq7cyK5W8PvvqtazOPsVjj7QzYZC0TcREbjRvQpMrvJX 8SxnlM3a9kCtRSb0Niy2FAjTZvzXUAZ0KeyllrllR63+vlR/gfJOVPgS8xhi66jJ012bXZ rfMmvmMWgdL0BdeXDbaUPvHQ06UeZBEWakXliThPZolBMgVWPvJ7D7Z7yQgJ2PVT/zw6GZ al6qOk9mIM8PbnvaViQvXnpe5lSIo9Fgy2y77uinw7JiramOuVaTW4HupzmRJlEw1yf8Ld 7aJYCmE4yYp9atGC0tx7s1C6AtrVvjlgqqRs7ezpLXGQZKTHum2VPo+3ZKWZNw== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id 2edb31da; Sun, 5 May 2024 11:14:12 +0000 (UTC) From: Dominique Martinet Date: Sun, 05 May 2024 20:13:58 +0900 Subject: [PATCH v2 2/3] perf parse-events: Add new 'fake_tp' parameter for tests Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240505-perf_digit-v2-2-6ece307fdaad@codewreck.org> References: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> In-Reply-To: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> To: Arnaldo Carvalho de Melo , Jiri Olsa , Peter Zijlstra , Ingo Molnar , Namhyung Kim , Mark Rutland , Alexander Shishkin , Ian Rogers , Adrian Hunter Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dominique Martinet X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=8985; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=JnlCDmRuutK/KzCo+rcyudV22smr9ryS2UjA5s2k2eg=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmN2oDEmljyYCHhaiLY64emzyN0yTXYXCZvV9DT 9/31pg6q+qJAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZjdqAwAKCRCrTpvsapjm cJOeD/4ka/vs1LKPPnlc4GRNvkkgJhUXcu9OmQSMsv0FraCv0dT67K7Kxpy6LR1D0BSuUlXVtmM Y1qq22yRGfEozEz5eGiu7ClmnieWZVd0rEMSBJQZd+wBfNWnvh+A8GjWXyopjq3ZeUrDvih2SY9 zjZNKoiFSyADIgR+2XtQA3qyoo7oQpoZp7JYXQ3MivNtQh1NrzhpcW5rUJagxTgn4oehwc67yw9 yEuFbjgKrXF9Bb7i8/W/iOfXE8TqFAljSyP/01dIdcQ13Jk7BO/KtgI35jGNJLa8YrZTpAw9exY SVC9Myvzwfmg4WdZ3jlyE82KngO6rcEt1Kvq64SlTspuG6BnZUDM5PIbRr41MFr8ZdqSfP5AyNd Qr5TGoxZLRrZOydK/6nOBt4UJVNQP2muRO3PZkB6+RnawOEVYa8am9o+v5DCQ8/dnhAS9+y4t3u j/RngDpbTOTybN638P+NYWXJ+avklwgPs3lvrHE0nsRXY4XbJ63M7RQp+2VKOP+/5gq4YM7eXaW ogI4SmS+Cglubto2AC/ECXZI4zaBvDiHInB0dGbxF7+ZJ/s6zta+1fGkr1bBnjZx7FmtO5Al+bD GqaKtvrj602KsCgNMcFn2t3rO+MIe7IgDaCIa4OXJ5W61G6CKHxZ4yQ449UsdUsxPeVjRM/XLxx woQF6+pZ79iJG4g== X-Developer-Key: i=asmadeus@codewreck.org; a=openpgp; fpr=B894379F662089525B3FB1B9333F1F391BBBB00A The next commit will allow tracepoints starting with digits, but most systems do not have any available by default so tests should skip the actual "check if it exists in /sys/kernel/debug/tracing" step. In order to do that, add a new boolean flag specifying if we should actually "format" the probe or not. Originally-by: Jiri Olsa Signed-off-by: Dominique Martinet Reviewed-by: Ian Rogers --- tools/perf/tests/parse-events.c | 6 ++++-- tools/perf/tests/pmu-events.c | 2 +- tools/perf/util/evlist.c | 3 ++- tools/perf/util/evsel.c | 20 +++++++++++++------- tools/perf/util/evsel.h | 4 ++-- tools/perf/util/metricgroup.c | 3 ++- tools/perf/util/parse-events.c | 9 ++++++--- tools/perf/util/parse-events.h | 6 ++++-- 8 files changed, 34 insertions(+), 19 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-event= s.c index feb5727584d1..ef056e8740fe 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -2504,7 +2504,8 @@ static int test_event(const struct evlist_test *e) return TEST_FAIL; } parse_events_error__init(&err); - ret =3D parse_events(evlist, e->name, &err); + ret =3D __parse_events(evlist, e->name, /*pmu_filter=3D*/NULL, &err, /*fa= ke_pmu=3D*/NULL, + /*warn_if_reordered=3D*/true, /*fake_tp=3D*/true); if (ret) { pr_debug("failed to parse event '%s', err %d\n", e->name, ret); parse_events_error__print(&err, e->name); @@ -2532,7 +2533,8 @@ static int test_event_fake_pmu(const char *str) =20 parse_events_error__init(&err); ret =3D __parse_events(evlist, str, /*pmu_filter=3D*/NULL, &err, - &perf_pmu__fake, /*warn_if_reordered=3D*/true); + &perf_pmu__fake, /*warn_if_reordered=3D*/true, + /*fake_tp=3D*/true); if (ret) { pr_debug("failed to parse event '%s', err %d\n", str, ret); diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 47a7c3277540..0a1308d84e9e 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -842,7 +842,7 @@ static int check_parse_id(const char *id, struct parse_= events_error *error, *cur =3D '/'; =20 ret =3D __parse_events(evlist, dup, /*pmu_filter=3D*/NULL, error, fake_pm= u, - /*warn_if_reordered=3D*/true); + /*warn_if_reordered=3D*/true, /*fake_tp=3D*/false); free(dup); =20 evlist__delete(evlist); diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 55a300a0977b..3a719edafc7a 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -298,7 +298,8 @@ struct evsel *evlist__add_aux_dummy(struct evlist *evli= st, bool system_wide) #ifdef HAVE_LIBTRACEEVENT struct evsel *evlist__add_sched_switch(struct evlist *evlist, bool system_= wide) { - struct evsel *evsel =3D evsel__newtp_idx("sched", "sched_switch", 0); + struct evsel *evsel =3D evsel__newtp_idx("sched", "sched_switch", 0, + /*format=3D*/true); =20 if (IS_ERR(evsel)) return evsel; diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 3536404e9447..4f818ab6b662 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -452,7 +452,7 @@ struct evsel *evsel__clone(struct evsel *orig) * Returns pointer with encoded error via interface. */ #ifdef HAVE_LIBTRACEEVENT -struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx) +struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx,= bool format) { struct evsel *evsel =3D zalloc(perf_evsel__object.size); int err =3D -ENOMEM; @@ -469,14 +469,20 @@ struct evsel *evsel__newtp_idx(const char *sys, const= char *name, int idx) if (asprintf(&evsel->name, "%s:%s", sys, name) < 0) goto out_free; =20 - evsel->tp_format =3D trace_event__tp_format(sys, name); - if (IS_ERR(evsel->tp_format)) { - err =3D PTR_ERR(evsel->tp_format); - goto out_free; + event_attr_init(&attr); + + if (format) { + evsel->tp_format =3D trace_event__tp_format(sys, name); + if (IS_ERR(evsel->tp_format)) { + err =3D PTR_ERR(evsel->tp_format); + goto out_free; + } + attr.config =3D evsel->tp_format->id; + } else { + attr.config =3D (__u64) -1; } =20 - event_attr_init(&attr); - attr.config =3D evsel->tp_format->id; + attr.sample_period =3D 1; evsel__init(evsel, &attr, idx); } diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 517cff431de2..375a38e15cd9 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -234,14 +234,14 @@ void free_config_terms(struct list_head *config_terms= ); =20 =20 #ifdef HAVE_LIBTRACEEVENT -struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx); +struct evsel *evsel__newtp_idx(const char *sys, const char *name, int idx,= bool format); =20 /* * Returns pointer with encoded error via interface. */ static inline struct evsel *evsel__newtp(const char *sys, const char *name) { - return evsel__newtp_idx(sys, name, 0); + return evsel__newtp_idx(sys, name, 0, true); } #endif =20 diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index 79ef6095ab28..c21f05f8f255 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -1502,7 +1502,8 @@ static int parse_ids(bool metric_no_merge, struct per= f_pmu *fake_pmu, pr_debug("Parsing metric events '%s'\n", events.buf); parse_events_error__init(&parse_error); ret =3D __parse_events(parsed_evlist, events.buf, /*pmu_filter=3D*/NULL, - &parse_error, fake_pmu, /*warn_if_reordered=3D*/false); + &parse_error, fake_pmu, /*warn_if_reordered=3D*/false, + /*fake_tp=3D*/false); if (ret) { parse_events_error__print(&parse_error, events.buf); goto err_out; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 6e8cba03f0ac..04508e07569d 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -526,7 +526,8 @@ static int add_tracepoint(struct parse_events_state *pa= rse_state, struct parse_events_terms *head_config, void *loc_) { YYLTYPE *loc =3D loc_; - struct evsel *evsel =3D evsel__newtp_idx(sys_name, evt_name, parse_state-= >idx++); + struct evsel *evsel =3D evsel__newtp_idx(sys_name, evt_name, parse_state-= >idx++, + !parse_state->fake_tp); =20 if (IS_ERR(evsel)) { tracepoint_error(err, PTR_ERR(evsel), sys_name, evt_name, loc->first_col= umn); @@ -2126,7 +2127,7 @@ static int parse_events__sort_events_and_fix_groups(s= truct list_head *list) =20 int __parse_events(struct evlist *evlist, const char *str, const char *pmu= _filter, struct parse_events_error *err, struct perf_pmu *fake_pmu, - bool warn_if_reordered) + bool warn_if_reordered, bool fake_tp) { struct parse_events_state parse_state =3D { .list =3D LIST_HEAD_INIT(parse_state.list), @@ -2134,6 +2135,7 @@ int __parse_events(struct evlist *evlist, const char = *str, const char *pmu_filte .error =3D err, .stoken =3D PE_START_EVENTS, .fake_pmu =3D fake_pmu, + .fake_tp =3D fake_tp, .pmu_filter =3D pmu_filter, .match_legacy_cache_terms =3D true, }; @@ -2343,7 +2345,8 @@ int parse_events_option(const struct option *opt, con= st char *str, =20 parse_events_error__init(&err); ret =3D __parse_events(*args->evlistp, str, args->pmu_filter, &err, - /*fake_pmu=3D*/NULL, /*warn_if_reordered=3D*/true); + /*fake_pmu=3D*/NULL, /*warn_if_reordered=3D*/true, + /*fake_tp=3D*/false); =20 if (ret) { parse_events_error__print(&err, str); diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index fd55a154ceff..b985a821546b 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -32,14 +32,14 @@ int parse_events_option_new_evlist(const struct option = *opt, const char *str, in __attribute__((nonnull(1, 2, 4))) int __parse_events(struct evlist *evlist, const char *str, const char *pmu= _filter, struct parse_events_error *error, struct perf_pmu *fake_pmu, - bool warn_if_reordered); + bool warn_if_reordered, bool fake_tp); =20 __attribute__((nonnull(1, 2, 3))) static inline int parse_events(struct evlist *evlist, const char *str, struct parse_events_error *err) { return __parse_events(evlist, str, /*pmu_filter=3D*/NULL, err, /*fake_pmu= =3D*/NULL, - /*warn_if_reordered=3D*/true); + /*warn_if_reordered=3D*/true, /*fake_tp=3D*/false); } =20 int parse_event(struct evlist *evlist, const char *str); @@ -152,6 +152,8 @@ struct parse_events_state { int stoken; /* Special fake PMU marker for testing. */ struct perf_pmu *fake_pmu; + /* Skip actual tracepoint processing for testing. */ + bool fake_tp; /* If non-null, when wildcard matching only match the given PMU. */ const char *pmu_filter; /* Should PE_LEGACY_NAME tokens be generated for config terms? */ --=20 2.44.0 From nobody Tue Feb 10 06:52:27 2026 Received: from submarine.notk.org (62-210-214-84.rev.poneytelecom.eu [62.210.214.84]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E771012B6C; Sun, 5 May 2024 11:14:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=62.210.214.84 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907671; cv=none; b=iK5MpA1cvg+C3mHRgy4N6sqKTgD0ilLT5oXDosij9kcAxkvPN4uM/30KZcgUEREPteJL+FILXwFrAedTnDDcZRAfq4xsLKthX62iTCBPEgZ83lE759pGx5eECe8gDQ19CP8k1kGXR8GOw3SNKip9dvNLefLAuBDu0kVUBNywfsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714907671; c=relaxed/simple; bh=xKnBTCxnt5rlmVlrpPihx0UXzUvVRUUzCiDejy13t0E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Vocr+ZJtjXkJwfPt17Y9Iz+YiU1Ci2mUKHatsCulKYINqlAnWsNdnH9Pso5Bbin+uwxpdi6yTZ/PNiQhwoD7oNFJ8Myk+RK6H2DlBqIEihQt+hnDNLrTLGG435H2FUWRRMUSX+D/p1EAosBuAGm4DBfnGr9zlwqVWhKRbRN0pUs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org; spf=pass smtp.mailfrom=codewreck.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=HXteSmh1; arc=none smtp.client-ip=62.210.214.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codewreck.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codewreck.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="HXteSmh1" Received: from gaia.codewreck.org (localhost [127.0.0.1]) by submarine.notk.org (Postfix) with ESMTPS id 6326C14C2DE; Sun, 5 May 2024 13:14:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1714907667; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iKbH9oEqAm9I5NHPxq8nJr2oLH8flpN/ZtGXaQSeqZQ=; b=HXteSmh1JntxcCesRQRXbEQPzP8ARQSjY8nvhssf4dEGQmhLh6AQYcmOMZzNKVttuu7pze cRZcSA+d82CUJP3Uc9eA6cYt4iAyxJ3HEbA46FFmfJE3JgoiVtz4aXtxd8Z+9REkiZ485f 2NgmpEhGH9zDYZ7iukqT5AVEU6EvH1gBJKvNz0Bm6a6UqUaIEP5XAGWy8CnfWU2sDvqAea r14JqdI2G0Doh7mdj12TrSf+/ewJNXKKU0WSKF+asZRPDu8LhhUHTHN+cHcw7V25bc6DzF Sy7rGxR98pSstPzoUfroAim8bheqX8VRcORTWPQOEkwkl2yWvBAVScJkt+BUew== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id 32b789c4; Sun, 5 May 2024 11:14:12 +0000 (UTC) From: Dominique Martinet Date: Sun, 05 May 2024 20:13:59 +0900 Subject: [PATCH v2 3/3] perf parse: Allow names to start with digits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240505-perf_digit-v2-3-6ece307fdaad@codewreck.org> References: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> In-Reply-To: <20240505-perf_digit-v2-0-6ece307fdaad@codewreck.org> To: Arnaldo Carvalho de Melo , Jiri Olsa , Peter Zijlstra , Ingo Molnar , Namhyung Kim , Mark Rutland , Alexander Shishkin , Ian Rogers , Adrian Hunter Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Dominique Martinet X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=1769; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=xKnBTCxnt5rlmVlrpPihx0UXzUvVRUUzCiDejy13t0E=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmN2oDVJM7LJl9HF5S6HxBR2ccQNvyzGhy8aGv8 UHj480KYc2JAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZjdqAwAKCRCrTpvsapjm cAFSD/47tK7VTcnW0HNnFkX+F8PJj4kYKJC7wEQ7oqOMTctVgA5NKVzSQ8QR5RoOmzd9lGrl3ca RfQd3RKH4B+2F9QC/xfVrSEexUJZBLCevj+9m350EcqKcU0v3+iKZChrkauRBmU42RsEWeukoSX rsHAYSo5NDT1xrZLk2AN5iYO0wHK4CHT2+MKcjD1xokR/sQItgUdU+tE4n+Uci+TfsNk96jl6NV sdNo0bwekQuiGhAWuiVCaQ+B0DspOPwdYun2tX9J4jB0e5ilMoOKolvWXuVihfILdSV89v1T5G3 CoP6hFRmOwWLku3wnrVwoYcMo6ZRvYyfvhJJyqyF2PheWoTzhtBiCBR+9pP74vrj/oqlgX3fASi OEYpd2rZEuOEpya7V+ng6TlEJejsqektG+hsu+k8f684w//cbbXrHRphdereFIWixmwkuuptIC4 16yHFM32Wx+bMNzpu6Z1gqIB1xl++v1ArN/GMq0kXOmhWOvW9DSWhNhqQnRZQH89dsLYVYfIktg oIc/6LX/7k/QoFVEFojFoCMC8brXwJUPgcifHJ21EirZhYMxjNkpLcB+VA3OxflFbysKkTTJ2mj PjC3mvXnSlenxumEhV97klUd609TrmoQldDqdEwO8n1zjVukFqIQBkwXC3o5viBQkKnHg/4Mux3 429FgpW3kWOjVPw== X-Developer-Key: i=asmadeus@codewreck.org; a=openpgp; fpr=B894379F662089525B3FB1B9333F1F391BBBB00A Tracepoints can start with digits, although we don't have many of these: $ rg -g '*.h' '\bTRACE_EVENT\([0-9]' net/mac802154/trace.h 53:TRACE_EVENT(802154_drv_return_int, ... net/ieee802154/trace.h 66:TRACE_EVENT(802154_rdev_add_virtual_intf, ... include/trace/events/9p.h 124:TRACE_EVENT(9p_client_req, ... Just allow names to start with digits too so e.g. perf trace -e '9p:*' works Signed-off-by: Dominique Martinet Reviewed-by: Ian Rogers Tested-by: Ian Rogers --- tools/perf/tests/parse-events.c | 5 +++++ tools/perf/util/parse-events.l | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-event= s.c index ef056e8740fe..6cf055dd5c09 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -2280,6 +2280,11 @@ static const struct evlist_test test__events[] =3D { .check =3D test__checkevent_breakpoint_2_events, /* 3 */ }, + { + .name =3D "9p:9p_client_req", + .check =3D test__checkevent_tracepoint, + /* 4 */ + }, }; =20 static const struct evlist_test test__events_pmu[] =3D { diff --git a/tools/perf/util/parse-events.l b/tools/perf/util/parse-events.l index e86c45675e1d..c36f8dbf593a 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l @@ -158,8 +158,8 @@ event [^,{}/]+ num_dec [0-9]+ num_hex 0x[a-fA-F0-9]{1,16} num_raw_hex [a-fA-F0-9]{1,16} -name [a-zA-Z_*?\[\]][a-zA-Z0-9_*?.\[\]!\-]* -name_tag [\'][a-zA-Z_*?\[\]][a-zA-Z0-9_*?\-,\.\[\]:=3D]*[\'] +name [a-zA-Z0-9_*?\[\]][a-zA-Z0-9_*?.\[\]!\-]* +name_tag [\'][a-zA-Z0-9_*?\[\]][a-zA-Z0-9_*?\-,\.\[\]:=3D]*[\'] name_minus [a-zA-Z_*?][a-zA-Z0-9\-_*?.:]* drv_cfg_term [a-zA-Z0-9_\.]+(=3D[a-zA-Z0-9_*?\.:]+)? /* --=20 2.44.0