From nobody Mon Feb 9 18:45:11 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (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 270942046A0 for ; Tue, 4 Mar 2025 13:50:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096218; cv=none; b=XG7lZ78Lrxj9+SAQITMC5/vErREnn7D9L/+lhCLGizUAzdY/4NyxJ899AULSgQKhAdQVS8YOcohMeevDgWIVmYpKFx/gH/Bxkdldao+Gioko0bDRhzFsqC8Dbo9faSBWgDNYf0HpzX8fwSeuPHlOMDiJhqUj1U0GfmdL8Hx+QDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096218; c=relaxed/simple; bh=fotnUl6mFVw6Lu0WmVlkseT+Ib5u0hL9bJOrBpjvm3M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UoWQwdkwzLM9lJl/QRxduOJEENuo/5l26k+B8tcIyVJGyby328IQROqFbFSVVFhgc+Z5SpV4kWwf02sVLwrVlLJhJs0JX2CpoTyupBgDDCjpwnvQd4Mp+LekfT7Fb+vwYARF5M5h5PzNazrOL22pSHAu7g8XrDd5/mUMHny9YdY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=MgoUqlXl; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="MgoUqlXl" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4393dc02b78so36713495e9.3 for ; Tue, 04 Mar 2025 05:50:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741096215; x=1741701015; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Oyc+dQeRJPZgGXdSbanHL1FEsriyRzJPurWdjKL7aTU=; b=MgoUqlXlA24ZC4OtijXioBT2X6yZ/uiWw8LkanFnRiBomSeTX+wc0soGJkbbl7YxrL tVXkajRqwTWALbvu4xxC5wk8jVn7jY8/s+uZjWYoqBPhMN4gP5qR6u0JlVkVDa203BGG LonKvRWFuXt8el74b+jwMChuvpyTyCgCfymBPi309bhpyzd956linHwmHmOjrx/Dr6Rk B3tRPMTjhJHfrPvWw5XATVp+WkV0jIMA449HWjxD/xg7oCw3M64JfJ6aMNU+miZmZRjK D+zC+KHYUCZyDJeXnj8rDxljP1KvbluMQsOOiywvJQ/5jiHumdTI65i+lSjrI//OFI7u J/dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741096215; x=1741701015; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Oyc+dQeRJPZgGXdSbanHL1FEsriyRzJPurWdjKL7aTU=; b=ih2UU6GVreo3Ro9wbGtsKk50Qneu11Smt55NUkO7aSmj/bFaKQT/+TEh1z9sIHM3Xc DvQEeulTpVVm0ov197msKBfpm8ADfHq2LBhbpe6R8bz9vYb/3Gf04xqobUIhjPkokIKr OEO4fAMnmOJgq8XcojOg79wybAwdyo3nn/D02/5yaemNIEFN0ApWJ4Y8tj2jqDRzhXld ZLf0zUWIKWtCaJT4xkOwS5Va3CRABdXEtYU4ojZa+ah9jHv2sGKcYXpuTEN6PhMLRqmi 2VpRS/vzAUTX0qqB7/Kv/SJUVEb9ZQOw19y4QvNJ07MDFWDoKTX4ELHMVve4zyNgLz1A RP9A== X-Forwarded-Encrypted: i=1; AJvYcCWkmsIDRhB2Is43l+Ob1Aji6Bb0VAxG/1jBcibyQe41oprPvknaodDLO4lOp4NWneFL9NVu9WCf5iT7cXY=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8Yu4XuFj0TvZkg4cZk6toLKcU2lF8Gyqr2AUQjMJX4LG+fje+ mXvLtqFGhwK1Z77kELIM0Cp0aWL7ZsaI8nB4mOIGdQvqjRqbvxZerP91KUos97k= X-Gm-Gg: ASbGnctBDYBMaeImLSvWJfLHojujFNWgdpGkJyiPCS53uYO9nvMUdpFqc7GXh5+u0PH h2mZuCkQCwVdbg/OzQYYpSyxTnBF4CmFJyaSAjE5RnUPp7cqeVzx39bbX3AvKL7IWtvrpbBx+L7 811XK1Y7Y90s3TOwp0JGSxpY7L6/SNonjqBDvPJ2fASaUXM4RN5Sj8KSeDbVD5puZSbCFYhExiK zEG25lUeay9iTVo2TI6OV5O7rcKMT4oskI+XpGmwvwCzp5cXbABXj0R5tSZK6clME8Gjnpj3ZIs 6M0/4VIg2qls4RK7AkVOefBwHd3yrF7GcmvCJ6U+GZvrtJmJ X-Google-Smtp-Source: AGHT+IEuxLuB2VKvMIgoNJYYZcq8eunqDiuuEPPOKwodqE83YBs5enQUed7C/k5mduwZC+ZQXinvcg== X-Received: by 2002:a5d:5f84:0:b0:38f:28dc:db58 with SMTP id ffacd0b85a97d-390ec7c70fcmr15776645f8f.10.1741096215355; Tue, 04 Mar 2025 05:50:15 -0800 (PST) Received: from pop-os.lan ([209.198.129.225]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390e47b7cf2sm18096697f8f.59.2025.03.04.05.50.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 05:50:14 -0800 (PST) From: James Clark Date: Tue, 04 Mar 2025 13:49:13 +0000 Subject: [PATCH 1/3] perf list: Order events by event name before PMU name 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: <20250304-james-perf-hybrid-list-v1-1-a363ffac283c@linaro.org> References: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> In-Reply-To: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Robin Murphy , Leo Yan Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 In order to be able to show a single line for the same events on different PMUs, they need to be grouped by event name. This is because deduplication relies on similar items being adjacent in the list. Even without the following changes this would arguably be better grouping because it's easier to find events in a topic alphabetically by name, rather than in separate PMU blocks. Signed-off-by: James Clark Tested-by: Ian Rogers Tested-by: Leo Yan --- tools/perf/util/pmus.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index dd7c2ffdab38..4d60bac2d2b9 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -445,15 +445,15 @@ static int cmp_sevent(const void *a, const void *b) if (a_iscpu !=3D b_iscpu) return a_iscpu ? -1 : 1; =20 - /* Order by PMU name. */ - if (as->pmu !=3D bs->pmu) { - ret =3D strcmp(as->pmu_name ?: "", bs->pmu_name ?: ""); - if (ret) - return ret; - } - /* Order by event name. */ - return strcmp(as->name, bs->name); + ret =3D strcmp(as->name, bs->name); + if (ret) + return ret; + + /* Order by PMU name. */ + if (as->pmu =3D=3D bs->pmu) + return 0; + return strcmp(as->pmu_name ?: "", bs->pmu_name ?: ""); } =20 static bool pmu_alias_is_duplicate(struct sevent *a, struct sevent *b) --=20 2.34.1 From nobody Mon Feb 9 18:45:11 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 70D2A2046B7 for ; Tue, 4 Mar 2025 13:50:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096220; cv=none; b=lR91MC2R3WFawZ4U9e09X50A7E5ZzcSHrpfZskZXF70iZ2cjNb/EkGrA2t+ljIzXVWJUZSA94IbeGKD8gzbnbCyKYWD/K83IZG/Z67sT2MFjvyZCiKuo1dJNAIm69dRrjGfCIVMB2i28/DPlNE1d1hp6u/U/TvBRP3URiN04Nik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096220; c=relaxed/simple; bh=ssO3CwRUgUXsweDnMWczi+OJMu2AOFJlyUIqu9OXdXI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KrsECc2Fn76H8xAcVioUkrka7fviedYfxfKNyGl+pqkVWRLNGrvnaru4rN3+6/RDHU8NAtPN9X+b10CZ3rCZ0kiYX75Jorapm40l6dTMOpx000/iYR++32gYZOPltg0LDj9mQdQCRjpV3KjaOhoik1Dhx++OGVsWBdnFjmAnRME= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=cjW5e4K4; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="cjW5e4K4" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-390eebcc331so2393603f8f.1 for ; Tue, 04 Mar 2025 05:50:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741096217; x=1741701017; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GrYsuIKVD+UTjXvBv+IWgOdWlxYNByPEbenQuMjAbWM=; b=cjW5e4K4qHWbxahFdrg805LT9v8V+jiap37SYD95fThhKysS7exu922aN4N3bXOvCC NfJAfzR9aAJcmzKu1nazg731HbdknNfQeWjpzcqwEnHqbN6b7jxgukqJQicmd5LKwZmY sDP0pmQezXzAEOv6WK222nxgWvvGEo7lsffQkFI1YqD58ft1FbtKzxo2Nh+/F8NyhVFi sEAz/3iDcB27Mz/ugVXeOGmzWXYGto2erKfvbqYbH+YWAT2GoDjYMjcfCR76HyXtw1+L NhlXV06677j+ciwTrIudePnxXDRkVKRDYLY9+/N7t9kdftJ6crsIWHyoz7cYndMvMFMW zXVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741096217; x=1741701017; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GrYsuIKVD+UTjXvBv+IWgOdWlxYNByPEbenQuMjAbWM=; b=XrFeLejOzL+WVvFPfsgwtS8Y0z4fx/qzmzeQMv/hXmEp9uwW1QBupoSeMRBK/F481W qJfX8Ur7N65z9pOC9RhJckbMwKBvfgWtTSmE+y67Ka0DyfS4Acaybf3qGtwqw4Q4RYTD mV/kLUGSAQYdZH9tz1Vrbq0iajODpi6p0FAOQ5HnskETHcJzxnAtqLY2rGnpidRYSxyn wyXMvFekg5wvFuV2VgsIV4w3RhrNLP0YNpwsqWbdEK9ynMCTajAYLZva+xypditLvisT VLsKJIocc+QXrsdIFp/42LD6DNJVtdV7RTmyCYtZi9/dN9XLmx3xTXsHsmLAcZlqMYuv DW0Q== X-Forwarded-Encrypted: i=1; AJvYcCUQgq+othWUgJHZpLITyOaLK3py8cN0h7ROGtUjUCAsgX29uPGo+Bnf+hzAVSL1WdJZGPWonb84Fw53ilY=@vger.kernel.org X-Gm-Message-State: AOJu0YzF4kaxNTx7dAsXV7pvtXiFYjT9oCPBZB1kxRHsPAHU1BAsJxZA IZENq2CFJ7gtkcdPtTBK4xOqIwgm3jUkYmwGHbSb0kKuQIeMAuxP5Nm8OT2uxnc= X-Gm-Gg: ASbGncvvcGZO9RSxQW/sX8Ead5BwEh8hRLwge5K+xgnoRoUoZddwLERImxwGZC2nXrq ca8LXjsULrGudXTxz7816hkJP8eI/APuYgTONFaMdKoXmwKtCQpF4K/vfuhtqEFVnOdaSATipS6 EIoZkR1GBkxMZGI0YePHoC7Os2jiOOsahrI7zYRpFUUxxKnwJ+fArUr38TYfH3F679xLldnXzp+ 2P/7NugnjRuIoZb9YImgOaHzbjf7R7TYbE2gtwr3WoaCnf/D+asFe1qGe6K+yBLBrPOrQ8rBtEW 6gsuYNDO4jgSHckvlwQXjdTvm+qSsn1XSALLyWgZuo+/ZLHp X-Google-Smtp-Source: AGHT+IGTOmyI1imsf8X1i3V3hRuDOKpDTP2yjLY6x/1Jn/E2a1PbaLnwVOa+4QCsl76xxoNWGtPb1g== X-Received: by 2002:a5d:5f8b:0:b0:38d:e3da:8b4f with SMTP id ffacd0b85a97d-391154cc7fcmr2698737f8f.0.1741096216709; Tue, 04 Mar 2025 05:50:16 -0800 (PST) Received: from pop-os.lan ([209.198.129.225]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390e47b7cf2sm18096697f8f.59.2025.03.04.05.50.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 05:50:16 -0800 (PST) From: James Clark Date: Tue, 04 Mar 2025 13:49:14 +0000 Subject: [PATCH 2/3] perf list: Collapse similar events across PMUs 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: <20250304-james-perf-hybrid-list-v1-2-a363ffac283c@linaro.org> References: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> In-Reply-To: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Robin Murphy , Leo Yan Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Instead of showing multiple line items with the same event name and description, show a single line and concatenate all PMUs that this event can belong to. Don't do it for json output. Machine readable output doesn't need to be minimized, and changing the "Unit" field to a list type would break backwards compatibility. Before: $ perf list -v ... br_indirect_spec [Branch speculatively executed,indirect branch. Unit: armv8_cortex_a= 53] br_indirect_spec [Branch speculatively executed,indirect branch. Unit: armv8_cortex_a= 57] After: $ perf list -v ... br_indirect_spec [Branch speculatively executed,indirect branch. Unit: armv8_cortex_a= 53,armv8_cortex_a57] Signed-off-by: James Clark Tested-by: Leo Yan --- tools/perf/builtin-list.c | 2 ++ tools/perf/util/pmus.c | 75 +++++++++++++++++++++++++++++++++++++-= ---- tools/perf/util/print-events.h | 1 + 3 files changed, 70 insertions(+), 8 deletions(-) diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c index fed482adb039..aacd7beae2a0 100644 --- a/tools/perf/builtin-list.c +++ b/tools/perf/builtin-list.c @@ -516,6 +516,7 @@ int cmd_list(int argc, const char **argv) .print_event =3D default_print_event, .print_metric =3D default_print_metric, .skip_duplicate_pmus =3D default_skip_duplicate_pmus, + .collapse_events =3D true }; const char *cputype =3D NULL; const char *unit_name =3D NULL; @@ -574,6 +575,7 @@ int cmd_list(int argc, const char **argv) .print_event =3D json_print_event, .print_metric =3D json_print_metric, .skip_duplicate_pmus =3D json_skip_duplicate_pmus, + .collapse_events =3D false }; ps =3D &json_ps; } else { diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index 4d60bac2d2b9..cb1b14ade25b 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -453,17 +453,50 @@ static int cmp_sevent(const void *a, const void *b) /* Order by PMU name. */ if (as->pmu =3D=3D bs->pmu) return 0; - return strcmp(as->pmu_name ?: "", bs->pmu_name ?: ""); + ret =3D strcmp(as->pmu_name ?: "", bs->pmu_name ?: ""); + if (ret) + return ret; + + /* Order by remaining displayed fields for purposes of deduplication late= r */ + ret =3D strcmp(as->scale_unit ?: "", bs->scale_unit ?: ""); + if (ret) + return ret; + ret =3D !!as->deprecated - !!bs->deprecated; + if (ret) + return ret; + ret =3D strcmp(as->desc ?: "", bs->desc ?: ""); + if (ret) + return ret; + return strcmp(as->long_desc ?: "", bs->long_desc ?: ""); } =20 -static bool pmu_alias_is_duplicate(struct sevent *a, struct sevent *b) +enum dup_type { + UNIQUE, + DUPLICATE, + SAME_TEXT +}; + +static enum dup_type pmu_alias_duplicate_type(struct sevent *a, struct sev= ent *b) { /* Different names -> never duplicates */ if (strcmp(a->name ?: "//", b->name ?: "//")) - return false; + return UNIQUE; + + /* Duplicate PMU name and event name -> hide completely */ + if (strcmp(a->pmu_name, b->pmu_name) =3D=3D 0) + return DUPLICATE; + + /* Any other different display text -> not duplicate */ + if (strcmp(a->topic ?: "", b->topic ?: "") || + strcmp(a->scale_unit ?: "", b->scale_unit ?: "") || + a->deprecated !=3D b->deprecated || + strcmp(a->desc ?: "", b->desc ?: "") || + strcmp(a->long_desc ?: "", b->long_desc ?: "")) { + return UNIQUE; + } =20 - /* Don't remove duplicates for different PMUs */ - return strcmp(a->pmu_name, b->pmu_name) =3D=3D 0; + /* Same display text but different PMU -> collapse */ + return SAME_TEXT; } =20 struct events_callback_state { @@ -501,6 +534,21 @@ static int perf_pmus__print_pmu_events__callback(void = *vstate, return 0; } =20 +static void concat_pmu_names(char *pmu_names, size_t size, const char *a, = const char *b) +{ + size_t len =3D strlen(pmu_names); + size_t added; + + if (len) + added =3D snprintf(pmu_names + len, size - len, ",%s", b); + else + added =3D snprintf(pmu_names, size, "%s,%s", a, b); + + /* Truncate with ... */ + if (added > 0 && added + len >=3D size) + sprintf(pmu_names + size - 4, "..."); +} + void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, v= oid *print_state) { struct perf_pmu *pmu; @@ -510,6 +558,7 @@ void perf_pmus__print_pmu_events(const struct print_cal= lbacks *print_cb, void *p struct events_callback_state state; bool skip_duplicate_pmus =3D print_cb->skip_duplicate_pmus(print_state); struct perf_pmu *(*scan_fn)(struct perf_pmu *); + char pmu_names[128] =3D {0}; =20 if (skip_duplicate_pmus) scan_fn =3D perf_pmus__scan_skip_duplicates; @@ -539,12 +588,21 @@ void perf_pmus__print_pmu_events(const struct print_c= allbacks *print_cb, void *p qsort(aliases, len, sizeof(struct sevent), cmp_sevent); for (int j =3D 0; j < len; j++) { /* Skip duplicates */ - if (j < len - 1 && pmu_alias_is_duplicate(&aliases[j], &aliases[j + 1])) - goto free; + if (j < len - 1) { + enum dup_type dt =3D pmu_alias_duplicate_type(&aliases[j], &aliases[j += 1]); + + if (dt =3D=3D DUPLICATE) { + goto free; + } else if (print_cb->collapse_events && dt =3D=3D SAME_TEXT) { + concat_pmu_names(pmu_names, sizeof(pmu_names), + aliases[j].pmu_name, aliases[j+1].pmu_name); + goto free; + } + } =20 print_cb->print_event(print_state, aliases[j].topic, - aliases[j].pmu_name, + pmu_names[0] ? pmu_names : aliases[j].pmu_name, aliases[j].name, aliases[j].alias, aliases[j].scale_unit, @@ -553,6 +611,7 @@ void perf_pmus__print_pmu_events(const struct print_cal= lbacks *print_cb, void *p aliases[j].desc, aliases[j].long_desc, aliases[j].encoding_desc); + pmu_names[0] =3D '\0'; free: zfree(&aliases[j].name); zfree(&aliases[j].alias); diff --git a/tools/perf/util/print-events.h b/tools/perf/util/print-events.h index 445efa1636c1..e91f9f830a2a 100644 --- a/tools/perf/util/print-events.h +++ b/tools/perf/util/print-events.h @@ -27,6 +27,7 @@ struct print_callbacks { const char *threshold, const char *unit); bool (*skip_duplicate_pmus)(void *print_state); + bool collapse_events; }; =20 /** Print all events, the default when no options are specified. */ --=20 2.34.1 From nobody Mon Feb 9 18:45:11 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (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 ACF20204876 for ; Tue, 4 Mar 2025 13:50:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096221; cv=none; b=Ay+WMKVk64PXGGI7vztDYzqapWMsyrMvAMpVYVieWQ6Xki9zd88Np0aO3Gsr+N49Z4OknjdKS72rl7js3wzqQQtKGrmt53Jus5Kz0lvagxcb8NaN5pl8pFvdhIv04hSAaMnUfKrtwMKgI2UT8JBcE3X+0BEdAKnOkvXOoLb/MyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741096221; c=relaxed/simple; bh=hRzu6kp4SOTwRfsDfhB16qNKM3knvwFdXsrorg2sjmQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KHu7s1x8GHkfKYco6UcNidUyWdPc9hlF/tGZDx9uQlugKkqAi7u795GCxia7Nh6hhi1sfcrryFYJVDfJKv3WWgdH5QHpvm7ifb5w3moPrjYzpAqTy8izyQS6jFPQKuTNMzvu0Os4Hb/SUKHCalQN1zMoNTWxRv0GZYR8f7DohOM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=BVqPUoBs; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="BVqPUoBs" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-390edaee0cfso3164968f8f.2 for ; Tue, 04 Mar 2025 05:50:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741096218; x=1741701018; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sRHArMWT/Sx8ZVXkckGXvrA6XesJCKhcfFByDHuvd1M=; b=BVqPUoBss8NlzXWXN66ILA4bV2Dg13/uv+cErN05NEU9gVZ+WaHtqdNdHAn7HmoODk uKmcYe91zerCdFuUz0hYLVX7kkdVRXNDg/GTN9bM2tmVwcdlivVeuWpdYZI8yTUx1rMM H1cBu/O2YzK47BFR8P8ISQjAlTcuCzfYxPNVdSX/Ns0nEia8RKobqsX67sa6PMJCSu0d 1HmWeDJ0GD5ecvhMXNfHddQEGbdh6JV+fUS5zhUYyE6MTPUvFFljFKlwQFFNo2qCDNp+ b/Qgm9KmonZmVwgYALHvIXHRuHZxiWQ/91EC0HghlCgbTz/YjJfqKx4hxfrWnWMIfnJ7 7qUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741096218; x=1741701018; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sRHArMWT/Sx8ZVXkckGXvrA6XesJCKhcfFByDHuvd1M=; b=lAqyk8A+4Ufxn+sNEAT/378l7Mfodk2rfIkAgGBF1S15Q/Do9VsFypi10iZqOtfoQm /tdocyoNjAvXq8HbipdxE9rSpKdPVHk7FlxkEYKCPJuQYujAcj146tMhwwxiQcluohWG lm0AM9FZZE0Jq5BK4f67KfbqWLffzNozTGVWdrgVVjFYspaceb/3quzkHvLCszCQXxDe 8F9lUTfca7yON8l5/33EeJ8dq7TNrtkfB3RIXLmBDkzPJTxx74doOXbmKw8pJS5iBSC+ c8iU40xwuRzAeurbeIowRovWTbtZkNahTKW3S4SfcKGzxu/n/DCAWsWy1Zoq1rHThBHj O3hQ== X-Forwarded-Encrypted: i=1; AJvYcCXHjY/r2Ru3isRbv4ofVuPFf4F8/8o3ME+7dTQh3gCwpWxCdBFUo5P2jWb1wILYxedXjTSK8EhJs+tR5DI=@vger.kernel.org X-Gm-Message-State: AOJu0YxeThL0kK5QKgt7bCrJeguqjTxiG9Xgpcsoiq+r7reORfpd/Eow WNorcXjXUg5CF3LJUc9pWV5ktxIscqaRZ4IFrofnlD3B2K+7B6QypcfqWl9ZPZE= X-Gm-Gg: ASbGncvgdgvFKp16YWg2tDSaNIng9dHsOjz7XklqkGTTbELcCdT66AXkpKmfC1JIRKg tk749WeR+8tyE0szCMGGu+/QOBI/WgW2JZdCbn7yLd27goUUP4faYsBgXY+DeE71Rju+dpRiu3v O+xiwnH466RrYdCMVJq3IuK9lE1wLwaHtlWJWLp61XMvBAj2cTBSS1CPt3zn+HCqKsj43cR6DvH OHwFogaIDjRKFRVabZ1kacbkG+954gObOLLL5RY9TbqwePGRvdaz3qmxRRmQNNhd9qDTgwaM9XI mH8ZyOuH1ZSW9IfXen9VpbXfZ5kNuCgEEBtXglALLcc4TAS+ X-Google-Smtp-Source: AGHT+IEmlyWKXFsEmvTB1STpuKG7ePek6osp09kKieoUt7uf/fFOTnVV2uNEUjj2FiPFbEJGtMnXfQ== X-Received: by 2002:a05:6000:4029:b0:385:fd07:8616 with SMTP id ffacd0b85a97d-390ec774897mr15404671f8f.0.1741096218001; Tue, 04 Mar 2025 05:50:18 -0800 (PST) Received: from pop-os.lan ([209.198.129.225]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-390e47b7cf2sm18096697f8f.59.2025.03.04.05.50.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Mar 2025 05:50:17 -0800 (PST) From: James Clark Date: Tue, 04 Mar 2025 13:49:15 +0000 Subject: [PATCH 3/3] perf list: Don't deduplicate core PMUs when listing events 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: <20250304-james-perf-hybrid-list-v1-3-a363ffac283c@linaro.org> References: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> In-Reply-To: <20250304-james-perf-hybrid-list-v1-0-a363ffac283c@linaro.org> To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Robin Murphy , Leo Yan Cc: linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, James Clark X-Mailer: b4 0.14.0 Commit 7afbf90ea2e2 ("perf pmu: Don't de-duplicate core PMUs") fixed a display mismatch related to deduplication within a single PMU, but it didn't fix the case where deduplicated PMUs aren't listed at all. Fix it by using the same function which takes is_core into account, except in the use_core_pmus block where it's always going to be true. Before this change, -v would be required to get the same behavior for core PMUs. Now it's no longer required: Before: $ perf list | grep br_indirect_spec -A 1 br_indirect_spec [Branch speculatively executed,indirect branch. Unit: armv8_cortex_a53] After: $ perf list | grep br_indirect_spec -A 2 [Branch speculatively executed,indirect branch. Unit: armv8_cortex_a53, armv8_cortex_a57] Signed-off-by: James Clark Tested-by: Leo Yan --- tools/perf/util/pmu.c | 5 +++-- tools/perf/util/pmu.h | 2 ++ tools/perf/util/pmus.c | 8 +++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 57450c73fb63..caff0d309012 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -834,9 +834,10 @@ static int is_sysfs_pmu_core(const char *name) * * @skip_duplicate_pmus: False in verbose mode so all uncore PMUs are visi= ble */ -static size_t pmu_deduped_name_len(const struct perf_pmu *pmu, const char = *name, - bool skip_duplicate_pmus) +size_t pmu_deduped_name_len(const struct perf_pmu *pmu, const char *name, + bool skip_duplicate_pmus) { + name =3D name ?: ""; return skip_duplicate_pmus && !pmu->is_core ? pmu_name_len_no_suffix(name) : strlen(name); diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index b93014cc3670..ce6a394a695d 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -297,5 +297,7 @@ struct perf_pmu *perf_pmus__find_core_pmu(void); =20 const char *perf_pmu__name_from_config(struct perf_pmu *pmu, u64 config); bool perf_pmu__is_fake(const struct perf_pmu *pmu); +size_t pmu_deduped_name_len(const struct perf_pmu *pmu, const char *name, + bool skip_duplicate_pmus); =20 #endif /* __PMU_H */ diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index cb1b14ade25b..1acc27af4d02 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -358,12 +358,14 @@ static struct perf_pmu *perf_pmus__scan_skip_duplicat= es(struct perf_pmu *pmu) if (!pmu) { pmu_read_sysfs(PERF_TOOL_PMU_TYPE_ALL_MASK); pmu =3D list_prepare_entry(pmu, &core_pmus, list); - } else - last_pmu_name_len =3D pmu_name_len_no_suffix(pmu->name ?: ""); + } else { + last_pmu_name_len =3D pmu_deduped_name_len(pmu, pmu->name, + /*skip_duplicate_pmus=3D*/true); + } =20 if (use_core_pmus) { list_for_each_entry_continue(pmu, &core_pmus, list) { - int pmu_name_len =3D pmu_name_len_no_suffix(pmu->name ?: ""); + int pmu_name_len =3D strlen(pmu->name ?: ""); =20 if (last_pmu_name_len =3D=3D pmu_name_len && !strncmp(last_pmu_name, pmu->name ?: "", pmu_name_len)) --=20 2.34.1