From nobody Sun Feb 8 05:35:06 2026 Received: from nautica.notk.org (nautica.notk.org [91.121.71.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2992C20DCB; Sun, 7 Apr 2024 12:18:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.121.71.147 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492342; cv=none; b=eHpp1wsjqbJBxot1LEEhfTEuVvKv28olr3QjVu15L90q1vnvQGXR1msA4LNy1Yp5MXqPDKJUYgtGY/ZzFSE9iOnJIDlvmlfyelAL5TIiH4YXTr5e1xDF77iDMyqaOXdH6/kuvtVUJ/c1tX8Ko/RoeQwNdgipYImmVFkJphJ+gFc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492342; c=relaxed/simple; bh=YPrT3RrPwtMxYxYHR1tgMYaAG6KTL3PQJhOp5B0pO64=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ePiB5TjhzUtAHqzmkuG1/5YSd0fipNP13pdfVJlon5gQCCCFVranLTWhKu8J8ecaFwFl18U4kr0d2XmjxOXZ5j2FZZYMSQwY2TUgu3t79Vwn5oAFTV5XVJdWahuC6vfTMKYXX385/He9lJqjFhBpybnn5PwbJrly1gIzf0FO18o= 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=fjcizU+Z; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=ssexH76N; arc=none smtp.client-ip=91.121.71.147 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="fjcizU+Z"; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="ssexH76N" Received: by nautica.notk.org (Postfix, from userid 108) id 5D80AC029; Sun, 7 Apr 2024 14:18:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492338; bh=ySaPnN89k1k/kS3RX4gmm+u+jmLYBvg6IkAyvSgsLXk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fjcizU+ZwLUMe2bc9moBAiXDnmoh+uwIrYaxI+EFiHrkbdkakPuwQ51mN/jl2VkTS Pieeqt3oOZTKHYMfoh0M8sYzYEc1MMS2QZjxeOgt8KvRFVSjWr2e6Cit/AY9UO2397 bXepDvRy5Em8rupzPzMUCmdkqnZK3RGFv6uu1QIE4QGoiEe4Gx9hvxg2HsSE7owtuw yBTsaGIWtjfOPnDCCWJJwWa1b2IdRae6GfaiBOKiPsTbIfHBEGquI7a7GM0IC7JTfZ TB0zTmn+1hlzyaxOpUhYYaOluvQjo+YHczX+wKcy0WdEoD+kfK9zgxnvUhqzx6lFII xcwiUt7im3swg== X-Spam-Level: Received: from gaia.codewreck.org (localhost [127.0.0.1]) by nautica.notk.org (Postfix) with ESMTPS id 8FB97C021; Sun, 7 Apr 2024 14:18:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492336; bh=ySaPnN89k1k/kS3RX4gmm+u+jmLYBvg6IkAyvSgsLXk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ssexH76Nq+Ph9vUT9OsoCOp+xC+nHUol7N1KhJbQK6Tl2p9M1BjGFYaDqD5Q5gK79 zGRTwDCKufTkeaSE2GeWkZVc+KbN1mCN7lm/1vO3zlt99OVhIh7Qs98Q1Um74T057+ QV6p4ZG4F5leUkCQQazyDmq80wCPTk7eaP/DunWfP66i1JPjvP/oEUa7d01jT7u/f4 eysw9gZp6ddJB5hn371tVyUEZ4aVaOgno1mC8n9cb26IjXAqLbSR2iZ4KJkfLyte6Y Er13DEMlNvGz8DLU6yTvBr3WarPp92436RaxMcQtYbWnO2AA5nYCLW5ulcGCzWU6Z8 OX4heFF2vkWNg== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id 188a9b4c; Sun, 7 Apr 2024 12:18:38 +0000 (UTC) From: Dominique Martinet Date: Sun, 07 Apr 2024 21:18:19 +0900 Subject: [PATCH 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: <20240407-perf_digit-v1-1-57ec37c63394@codewreck.org> References: <20240407-perf_digit-v1-0-57ec37c63394@codewreck.org> In-Reply-To: <20240407-perf_digit-v1-0-57ec37c63394@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 , Jiri Olsa X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=6036; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=YPrT3RrPwtMxYxYHR1tgMYaAG6KTL3PQJhOp5B0pO64=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmEo8eb7GtTPr46kh5kJ+NWT3vY30ASSM4zRLGq /AAgIEFifWJAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZhKPHgAKCRCrTpvsapjm cLPeD/9NBSQ4wDqoTAdnYfEkz2h//YI+wzWrXFEiHTKiDk7sv3IEL7FgVGD9od/fTwIy9AawVDg pD5h3WmYL1jjF0wCVApb8TMS9qOFs57PKK6ROmdy5q8JtlBqrJQeaEtZ68fkzYwgPi8pusPqO+C DnMmREhyjGtD6uDPZjGYf9acDzK17dN6C8sInWS3a8ZtD4gaFqnBUQFbDLqhR7l0FqO0dGBqag/ gGmdZIp6bAbt8AZAPai3r6e2QnI0v0FxNKZUbqZtSRzsABafmosDvpKpPPfebNMZdnUXgOicNQ8 si69YwvbZtk5UY7bMqKS9V5Oafd6uE8Rod1fK/y2GT2VIJ5hRaTNwzCI0OlIDZJ2VcptvPmKh4u oTf2qpLpsPXI5k+f25mbl9V2Phd1aW6QPI4Lt6jQwzBMNBh7x0ysAWMr9C5VLnCvLTs5KvCHVAl yRoLHHdqJwwxttUhzCOnVeEbKNbaCpl4e+uuGyW3K1Mw4zIZfOdRVN/pf5H4iIrgnNRAJcc9laP k4G1k4ZgVPFhtPLVCRIvCuIXATZcr8CF213Kw+ECczXyBxowsorDvOY3TZbhW8kAjZ5jOGAvKor t2ZCDR5MgycGf7+FNqWde6n7l0DM9NewqgM4BF9xXSxtRRZN8UBp82mf9k6y01thDMb9WJfLgU6 Ucs+YspgfElSODA== 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 --- 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.43.0 From nobody Sun Feb 8 05:35:06 2026 Received: from nautica.notk.org (nautica.notk.org [91.121.71.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CF7C22EFD; Sun, 7 Apr 2024 12:19:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.121.71.147 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492343; cv=none; b=g0SHm6G/BT3thVJpbieLeIf6ty6slS0Hc55FPCdhyagK1uybIkYB+YLigpSNC+IThF7bb8BT5K85k5zEWKd+nx2Vc92hwLKz4VHY8SbpjU8jRG2aQpjq/Aac00nzhmT+aNMZ9wGnhDzSR0ATdQdG7tHCSys8LMniqtVSl8bPIiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492343; c=relaxed/simple; bh=QHIKR9y7g6cSt5DXzAIiaGmRTUaGawOCp3GhZNAHZGg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mK8OIAH4+GmH/ANzuTHLujiwIAGi7sAlmNVfOa9kjAZV0sgRFwxAmZU5FoE+f9jiaV5ze+oTzyUH4K3P3nds7iZR+rYMJLfqo5qLqraD0/IkGwHur42tuanRD0mZdsYmAMn2ZPedOnwckKonQh3jGoft3ySwzDGVynuZvkG9K2o= 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=XCiJwHv8; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=CTF5znRv; arc=none smtp.client-ip=91.121.71.147 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="XCiJwHv8"; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="CTF5znRv" Received: by nautica.notk.org (Postfix, from userid 108) id D31DCC01C; Sun, 7 Apr 2024 14:18:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492339; bh=AcmFfipoJbwXPcuwe+G/ffcJRLh8XWlTMp6pXT3ZnTk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XCiJwHv8UXoWVFbilqe/6vZNZYol5lFaH6ONfN0Aqrc2doJoRJVfjQOeFckcP7Rb7 IDmbVtFGNdTmdkib4K5sQWcePsBa3L2BMvT9U6fzOJiOACmXuUhwsvhendOY8BagW6 Im3QuxAV27BLTsImWI7XTfQil58Fz5l2GMYMLDONvfK9jeq/+H27oIkryaAg2e4KR0 oxP6TSmu++ElVbabOBOy9iwWy8gsyLm7X8E5sALiMloiBYiFU9nWys4GgtslNf3EzE fLHq/sQ8+3MldZUD0dMmpDjgaEChP21BQWAYJwp3AN0m1MYPoVUtxutV12/IpO5vZ/ UV31+wdsli3RQ== X-Spam-Level: Received: from gaia.codewreck.org (localhost [127.0.0.1]) by nautica.notk.org (Postfix) with ESMTPS id 5D60EC01C; Sun, 7 Apr 2024 14:18:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492337; bh=AcmFfipoJbwXPcuwe+G/ffcJRLh8XWlTMp6pXT3ZnTk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CTF5znRv7jsfgcezhFLZ2a5WzsXU3Z8Ngi03Bmdq4DXcNKSyd4WqIc5/AOofXxep/ EKu0I8IHdvFkmcuMzjrlXBCYBlLSlqSlgvvzgg+kv6CHa+lhUKSBgybmmBf/hv7gdf zvwx43wnaEUwURj8gbMpNjFj9VDMxZPbZFQ1MjF8Ug6zQFRNiKh3MMnQDGTzDAi7dv HOeML8S0ZlsSwfFWh+itJJWUjckzfoYgBW+nVcNEcOQMsPz/su96E6CcayErZlVidl 1m2FvZMAoUzl+PTK4e5lvFwPxj8D1KsU3JyiNnfHIoQhHiXCh3t4lllM63iimpgNHo uB9MeOatgqgNw== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id c8312b56; Sun, 7 Apr 2024 12:18:38 +0000 (UTC) From: Dominique Martinet Date: Sun, 07 Apr 2024 21:18:20 +0900 Subject: [PATCH 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: <20240407-perf_digit-v1-2-57ec37c63394@codewreck.org> References: <20240407-perf_digit-v1-0-57ec37c63394@codewreck.org> In-Reply-To: <20240407-perf_digit-v1-0-57ec37c63394@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 , Jiri Olsa X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=openpgp-sha256; l=8987; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=QHIKR9y7g6cSt5DXzAIiaGmRTUaGawOCp3GhZNAHZGg=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmEo8eC0jyndCoSRQ0SDD10KwGThMCEpaB9hDSX JEVdEEvy82JAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZhKPHgAKCRCrTpvsapjm cM/0D/4yfX1EnqURpqDrjBEapVKH/pOWqHBNXSJJ3Y/zyAKDT8TcZX7gK1r/BuT8EEK9iAdr/3a R9rcdrVnskvxhIPDHEwCtm/UDIpt2dz1crfyXV/b/mG2vCjKGEeKVwHBIFjPg05gr6mMu2aWV7W Q0eg0muk4KnF372O0sNo+oCki44/H8WJgGHljl+jGf9AyKjQVEyKlzfDzwXdcijV29CkCyqLcNt /4dP30hFPUcNwkQlZRdBvse4tYDUtr6pm77IJMxcfWFC9r6I2MgIrrmYBWWcJ6+3JLWq3kZeaaK UoDPhnDrMIvOaysip7vdKFfX+WDnT1+qyliBMdu7O/nbuMF9CT+NoMN4kmoGYtcXz8dZ9xceBVf TTF7VWEiZYgJrKM0ehiVQRZoWt1sXnWUHDKYTuRN4Wbmc25hRcXvhnJZMGS75w+n+GdnnP2RT3+ Nt8o93lNoTMgyqsDyRZeSlM1z2ZjL2t8WE4YCHCYcQM7KTHysi8fypYH7CfEAwV0jEMXOIiJs02 hOu/A2TMo86c3/BrUYHcS9asixN0pbfr0XrX5gI59ZN9WhFlIMJh1yTj2NcVbNvS6+OAQsRqhxa 928obQUYfkeAt6U4HJmxj3UzZN8oF86Fq0AIaSusIijYUV2ljNykNo2lvL9HVF/VQVrvIZidDnT YBtspACGeQzk5xA== 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 --- 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.43.0 From nobody Sun Feb 8 05:35:06 2026 Received: from nautica.notk.org (nautica.notk.org [91.121.71.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A8FF2C19E; Sun, 7 Apr 2024 12:19:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.121.71.147 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492348; cv=none; b=IOM3Ngy1U/b3DwIEv76xeY6NWlpc/4JxO1OFlNz5f31oEFX8JFgVCNBAIaGvzSwhyQYUEewfk5zejvxKBPmquejs9Y9scyigEydFfg/vACUEwZINXCmpsnOBApdfEe0D/7s6EiSYOE/G22dAD0qmehrFzq2/hH2e4NwI7aO4b04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712492348; c=relaxed/simple; bh=w5Zn22WWj7w05leupcr7VGf15okWuJstVq9VJGRWJo8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RIsNro/k6S/kNKKB0Zuw8duA4JMMyTLkrjYbuuYvUPBiEFJa0RLraQvjs5szEVD6P5LqnTMXrWc+Pm5zp2HcXO+iKF9zHBQfGSCDye/Oih5EJYEnVvMYWKBIq2CzH4nFhngHUNjWhdExS+1/rh1BUa5RjRLZTuCnoQuB2LE5Crs= 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=Cyax/H+Q; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b=KhnIXrBU; arc=none smtp.client-ip=91.121.71.147 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="Cyax/H+Q"; dkim=pass (2048-bit key) header.d=codewreck.org header.i=@codewreck.org header.b="KhnIXrBU" Received: by nautica.notk.org (Postfix, from userid 108) id 937BBC024; Sun, 7 Apr 2024 14:19:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492345; bh=a7MS0gbG0hu3f7XINu31Ujv3Gow1bMpNC1YjoG+hAyw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Cyax/H+QzHjRht5/enmstCvaq0twK2hf5Fa++UfzQiiqINCqk6Bw71EmtP28XIy79 8+Cl2bOBrQ/Ua11IjKPzwh74JJQojpBqNGdF9/xtuhcIScjqB+Hn+lQ4CzgP3kO32c O2kcC0Ha7AhLmtF7okr0HO67KsDDP5fDbwl+GViCdBNjgkJboa/QFr7Nm4i00PsuE2 RJrSSGOlYC5rLq8/vaEsMdX6PKKUY5wYkxO7o6RRThXvgzuZjBpaeaUBtFORAeRssf ATMjXemckqm0hm3DiABZqdNPnl58jCBapgpctmgyw+j4uzbxvry7OxhiqZsrCEbbou IrDgVsnKUUrRw== X-Spam-Level: Received: from gaia.codewreck.org (localhost [127.0.0.1]) by nautica.notk.org (Postfix) with ESMTPS id D05A1C025; Sun, 7 Apr 2024 14:18:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codewreck.org; s=2; t=1712492344; bh=a7MS0gbG0hu3f7XINu31Ujv3Gow1bMpNC1YjoG+hAyw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KhnIXrBUGjiJYFbQBL8j2EkSl/MhtE06FkJAGbZ4Of8sr4q1VJrhUAB2XSeYjxWj2 +n50IbctlvX6DBXkEru4fFj0UYisz22rH9rKsh4xr0ueMjRmxGlhV5f/zIoHiks1Iw Ns7aJ9sYmmksMrRBTMvsEQ9V7ImRLZi4CR2IILoVn5c9uPWbJgmEXKLZH1agsIEM4i 3+w1YtnIHLAtS8pvav+Y90aGoClEOQ6K8ajsOKcP0Oe7MOm66ycBFXkudYJ0EHLmq2 777hegniVg8u0b6y5sVoIdMQU2YbCUPyYxWqqoa0js/DPJrV9NmGS04S02vp5Wt+oT eTHoVrsP2Hd8w== Received: from [127.0.0.1] (localhost.lan [::1]) by gaia.codewreck.org (OpenSMTPD) with ESMTP id db87db60; Sun, 7 Apr 2024 12:18:38 +0000 (UTC) From: Dominique Martinet Date: Sun, 07 Apr 2024 21:18:21 +0900 Subject: [PATCH 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: <20240407-perf_digit-v1-3-57ec37c63394@codewreck.org> References: <20240407-perf_digit-v1-0-57ec37c63394@codewreck.org> In-Reply-To: <20240407-perf_digit-v1-0-57ec37c63394@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=1697; i=asmadeus@codewreck.org; h=from:subject:message-id; bh=w5Zn22WWj7w05leupcr7VGf15okWuJstVq9VJGRWJo8=; b=owEBbQKS/ZANAwAIAatOm+xqmOZwAcsmYgBmEo8eb3DyARjfSxS7XoZUAZqEO5aTXazPO4Awl cVasWS8B/6JAjMEAAEIAB0WIQT8g9txgG5a3TOhiE6rTpvsapjmcAUCZhKPHgAKCRCrTpvsapjm cPXkD/0VzdFZbxx3ZK7tEX9ErXA1hSu4NV+bFosKN41gxD7lPgvfL77ogj3LbPw+1RIRyY0JLxl M0/rm9ixXIU1qsch1I9r12PIsa2x0sz+XOEwtPoDCUWogwd5ZpZQqDiSea/mI+d1/QhMZcLpoMJ uhL4mQJ34iNpGGXp2DijKYbUZkUNDaAQLjEHZSWr1gAx5zKO8n06VYH8tvgapjZOYx3goGLHvS3 EleYhJID/tNC2bu2yOPUKloxLiXGbxjV9pZok8qFyxV6h4lMksXn0KFE7UN6WAW1UYimqNtR24I AZmwDmm01BJcpwQQC1VBgPsMQtwmtxeIoz1+Y2v57ok4GxFQWt7dSwdaRgaXNTu15/W6XyoNPtf RSK0RlgTeZBYvsiiao/lzdi+XCvkJ0cliIKbnK+a9KObiuj34yLxRQT2q56tFbYn1pX7Th1mV8+ fAWNhYZkBY7mKt1WdAWsxIorO4sJfyaiDw8Y6+O0ir8mpOtTCz5bUUi+heZ1WkZV9xNYmlsWd17 4ELEa2TWgLD8vnMjgQkf2l+gJbN56lwpH4CJu248IV2Z4CEJ98s4lWBMgG3j+zQ6EY3FQvQ17Np XaZj5Cn1KxGLB/6K9EOcNLXB5AudQJnAYOmyA+SSHWVn5bQWNHIbJV4tfKTWGfSFASA0J3WNmW6 rZ1WahTRoM0K/HQ== 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 probe -e '9p:*' works Signed-off-by: Dominique Martinet --- tools/perf/tests/parse-events.c | 5 +++++ tools/perf/util/parse-events.l | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) 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..41c30ff29783 100644 --- a/tools/perf/util/parse-events.l +++ b/tools/perf/util/parse-events.l @@ -158,7 +158,7 @@ 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 [a-zA-Z0-9_*?\[\]][a-zA-Z0-9_*?.\[\]!\-]* name_tag [\'][a-zA-Z_*?\[\]][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.43.0