From nobody Sun Feb 8 00:43:17 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 69BFA1370 for ; Fri, 8 Mar 2024 00:19:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857179; cv=none; b=AGie5ScwDhW+493C5XPMqn0nyXqDJXl9mf6NaxmEJyFUHE/RN5lOxj/SdJVUXCELhgyVZTDxgUHL5fXrR76vv7NpkBZ4yhM5E8mUmbRx5b4lzmcEoB7MMOkqSIgSFHqPCSt3e9/tBcGHWKOVfaccSg+tFQJvBeC9Xx6qCqMLzGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857179; c=relaxed/simple; bh=zZMAjPThw9neF0rFKQqn5K77WjJlmrho8flUA6F99+Y=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=JDe9clJrDOREHs1lc0oHaisaHiXGWJ3v2b+I4PABK48PEGisedXrnKUJZF67epilR/aUeq6GnAEtB6oIpkorgyah6sZ+fO2WEHLI4CoN3bJGZyday6zkPwJjDry4kv/cTwi2WLW9jAJ3f4wzCpNDRCdGj9yNwHZ3BLA3EQT99yo= 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=qWXayoKd; arc=none smtp.client-ip=209.85.128.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="qWXayoKd" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-609ff3206c3so11905277b3.2 for ; Thu, 07 Mar 2024 16:19:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857177; x=1710461977; 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=N0YwbzbP5FZTLjIONNJPfeJ1/VNBa3uXm6yCLCKpsEw=; b=qWXayoKdTeesK4Ggz9BGqb7sQUzY/KYFBduc8RV6Xhi5O61XnGIl4dCwBPlu3jMUPV ZRycLGMauA2Qcu1ao/h+jcLzVXjHXZRsIHyR4hpHUhaE74WpYPWvVhb4kUPcelRuKZP6 ND7Tu3XvYBfKbcsav5aPIW4yovybRPTCyjZl++apiy9fRjmuPPWDUEYBG9vh2TuQUibD 6bUo4eZ2A3ZyGLG8U/9rYDv9rcdeHq/f0BjuLUkN3iQ/CMfYSTi5pbafI2yVmJeCNDqL 8lLiIB0oTdJ3Znj0CXihyrq1hBaNTJpip6RaNsZWE4EkdDSdPqRVsfYDsFfsgsmmHiz8 1jTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857177; x=1710461977; 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=N0YwbzbP5FZTLjIONNJPfeJ1/VNBa3uXm6yCLCKpsEw=; b=vw47HXRVhTi4uTlyaD5hgh89J1JzuCYBAF6I7ZMwM6YxzxIeCesFMdKhnhiTESKnUF MMYniZsm6oH79zBuJYF4cXQLlAGCquZGl4+fGHD2OcVN/fQH+C1HAOBBIDeenB3d+qMC pTCT7UEmVmyUEWZusSPLugjIOxV8hLv21I3hiYg8UnNHJ6RJPYRgL45+7X18CY7nPHwv IvVpYuxpwyyATmcQjYv3VT/bt4514QN7ZfETIx1cSBdf0FQt8exvNq0FW6Cg9M/M8VGb MICK2ozwLL95K1EsU3GT4SUNnMI1bn0jVgmPyUmiob76XO7CnXkO3agzwCQiEJTCpnho LEPA== X-Forwarded-Encrypted: i=1; AJvYcCVFgbv2CWKWp61ciRYiwzeCkijdLxCQFqD7xACUSCmGd7xRXFygH3odIB3gWD0tL2P8HMe4qhbNam9ZYERRAgbJI+tZo2qUYfLzELWh X-Gm-Message-State: AOJu0YxbG3dDHgWN90Fnb81Y/3smgF3NrsF+5mAPUN2r5o+dwSSjEl22 rFEYlSXA4wqZ5Awsf09xD83vFOFGUBSRiO0NZaMzqhKIG9mBCj9wOVWFU0NT54P6M9oia2HKLy3 UTajWHQ== X-Google-Smtp-Source: AGHT+IF3uvvL8v3YXnycSlKL1hADHqP6bRku2AAjc2ekmiQGbnnZpULdhDJ78tmMqT1EyVuNR20TuMp+kotJ X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a05:6902:10c1:b0:dc7:4b9:fbc6 with SMTP id w1-20020a05690210c100b00dc704b9fbc6mr4903613ybu.10.1709857177330; Thu, 07 Mar 2024 16:19:37 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:10 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 1/6] perf list: Add tracepoint encoding to detailed output From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The tracepoint id holds the config value and is probed in determining what an event is. Add reading of the id so that we can display the event encoding as: ``` $ perf list --details ... alarmtimer:alarmtimer_cancel [Tracepoint event] tracepoint/config=3D0x18c/ ... ``` Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/util/print-events.c | 35 ++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/print-events.c b/tools/perf/util/print-events.c index 7b54e9385442..e0d2b49bab66 100644 --- a/tools/perf/util/print-events.c +++ b/tools/perf/util/print-events.c @@ -9,6 +9,7 @@ #include =20 #include +#include #include #include #include @@ -92,34 +93,48 @@ void print_tracepoint_events(const struct print_callbac= ks *print_cb __maybe_unus =20 evt_items =3D scandirat(events_fd, sys_dirent->d_name, &evt_namelist, NU= LL, alphasort); for (int j =3D 0; j < evt_items; j++) { + /* + * Buffer sized at twice the max filename length + 1 + * separator + 1 \0 terminator. + */ + char buf[NAME_MAX * 2 + 2]; + /* 16 possible hex digits and 22 other characters and \0. */ + char encoding[16 + 22]; struct dirent *evt_dirent =3D evt_namelist[j]; - char evt_path[MAXPATHLEN]; - int evt_fd; + struct io id; + __u64 config; =20 if (evt_dirent->d_type !=3D DT_DIR || !strcmp(evt_dirent->d_name, ".") || !strcmp(evt_dirent->d_name, "..")) goto next_evt; =20 - snprintf(evt_path, sizeof(evt_path), "%s/id", evt_dirent->d_name); - evt_fd =3D openat(dir_fd, evt_path, O_RDONLY); - if (evt_fd < 0) + snprintf(buf, sizeof(buf), "%s/id", evt_dirent->d_name); + io__init(&id, openat(dir_fd, buf, O_RDONLY), buf, sizeof(buf)); + + if (id.fd < 0) + goto next_evt; + + if (io__get_dec(&id, &config) < 0) { + close(id.fd); goto next_evt; - close(evt_fd); + } + close(id.fd); =20 - snprintf(evt_path, MAXPATHLEN, "%s:%s", + snprintf(buf, sizeof(buf), "%s:%s", sys_dirent->d_name, evt_dirent->d_name); + snprintf(encoding, sizeof(encoding), "tracepoint/config=3D0x%llx/", con= fig); print_cb->print_event(print_state, /*topic=3D*/NULL, - /*pmu_name=3D*/NULL, - evt_path, + /*pmu_name=3D*/NULL, /* really "tracepoint" */ + /*event_name=3D*/buf, /*event_alias=3D*/NULL, /*scale_unit=3D*/NULL, /*deprecated=3D*/false, "Tracepoint event", /*desc=3D*/NULL, /*long_desc=3D*/NULL, - /*encoding_desc=3D*/NULL); + encoding); next_evt: free(evt_namelist[j]); } --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 00:43:17 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 E3FE33C36 for ; Fri, 8 Mar 2024 00:19:40 +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=1709857182; cv=none; b=ixifzcvPPQR/fsD6/qI0GN5Rp6TzWUwc3BVNNItzjOxNNlBOXqF9BmxSN9iW37mMEqtQEInKcVHPoKoBrhN+xJrYqA8AK1xs8jGSEoNNUHGZBUiXNKIZt5VVzZjrlM/HsLVvNvcVTUNNS+1siCaWC4LXDQTNn3t/u51FNduLcKM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857182; c=relaxed/simple; bh=kbFBHdCad/TTKVPzgQtSH7M2inFZrQ/NSaJSVlW2wnY=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=lIikpHnIdC822sfX4Y/5TM5i1P6Unsd4JZT1SYZkP50s9ytgFhoosJ61xPaOakVSqUBaO/ZQ3IzWufEehR2QPQLRLqukyFPtn0kw0kya6tnRTKqRCx+q+r1871lc59z6XY60dmB/GywjTCMrL4a8UHQsKdx9FF9fY4HC/nYMDr8= 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=QQ4ZptBi; 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="QQ4ZptBi" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc64e0fc7c8so2361878276.2 for ; Thu, 07 Mar 2024 16:19:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857180; x=1710461980; 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=w11Yp0wodb7GDuRE7Pf73tA+Sknph1YJzxldtQ9IWAs=; b=QQ4ZptBitK5TTDAKSdCOdFGhIpb55UUs/3U5tVvnVepfGVdHa06+0GZPrX0LlJA5JK DThxZ+bWZ0IPOkhKkZrcHJSGFLGkqoStRlWrwsDA0MOZ3MA3W07sT1CJm9gse97kV6Dl 3XuZgf6fyFw2wViovu5srkfbuxNEJM7Jidwk1YBvNOE24HWmtSwzvks1pebQmtHWf9eB Omhw53U1CLQ2IXE5+6CbWkpP2fO1fDJRD93r/wVg2BS3EMiDZ5xG1AvRZuUvHpu1a79q Ds6VyVAP8DVpKqc6YFE8JmL/H8Nc9e8nw0w1vhFdTl6CC81kKfF7RO2bgYTyYtoZNn+e ohpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857180; x=1710461980; 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=w11Yp0wodb7GDuRE7Pf73tA+Sknph1YJzxldtQ9IWAs=; b=PdWbFkISh7RehLHoI6SL0yIvEW1+xsaYfzqUlebiziyoXA/DGsewL6LXO16wlxGGIZ pKkMWb8ugdMBmC50iBiItHk/xl36h/YnvL6SrMjl3XqsH7Gnc+XdajD7NJD6vH2Xh5Mq Czx9LO5mcPdNEiJNgfa9ldXPQ8oeT39N5wNrxNidMrve8Vg5esSKUaJVXFqTgZF+0lr8 SNzuXEeM2SeK8/UhXjWOe9N8Bsbkqbe1sm8n5neRacUzkh4lYGsYsRq4ap8nU7qeknRz ohKfKb787CqD24S1ozNffqTdcpPEAzXJ/7Jqta3T6Dx1Vc67p4FNMqDs9Pv+eZyXFGau gL7Q== X-Forwarded-Encrypted: i=1; AJvYcCWOBt6w1XOPLxY0Lpyw72eeFxTlIHhLEvNpLGxvbjkWmaDgZL1CIsdMYPpIDGqvHKyXAP5Qu/FB6eyzOK8CcULWi8QL8Kt36X+ohjbT X-Gm-Message-State: AOJu0Ywg+yb0QFpktqcGRh8zFgiCt9Ji13jSVLAaeKveuwnkYSy6OwFp DRG40VHQOyTGZYQLQcfQygXGTgFOXjpfVqwliRN+mcxVqtSj+lSqwLGWgeCjtd61a7FWtsH0ie1 RVYHZGQ== X-Google-Smtp-Source: AGHT+IHztcMIkTIC8gB0elvRFJcsKwcUzsPx2wj83xiF8gMH2QEYPBba6BBXD9kRH4bglX9Pa8g2PDxs21M3 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a05:6902:1821:b0:dc7:9218:df3b with SMTP id cf33-20020a056902182100b00dc79218df3bmr879191ybb.10.1709857179792; Thu, 07 Mar 2024 16:19:39 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:11 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 2/6] perf pmu: Drop "default_core" from alias names From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" "default_core" is used by jevents.py for json events' PMU name when none is specified. On x86 the "default_core" is typically the PMU "cpu". When creating an alias see if the event's PMU name is "default_core" in which case don't record it. This means in places like "perf list" the PMU's name will be used in its place. Before: ``` $ perf list --details ... cache: l1d.replacement [Counts the number of cache lines replaced in L1 data cache] default_core/event=3D0x51,period=3D0x186a3,umask=3D0x1/ ... ``` After: ``` $ perf list --details ... cache: l1d.replacement [Counts the number of cache lines replaced in L1 data cache. Unit: c= pu] cpu/event=3D0x51,period=3D0x186a3,umask=3D0x1/ ... ``` Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/util/pmu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index f39cbbc1a7ec..24be587e3537 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -518,7 +518,8 @@ static int perf_pmu__new_alias(struct perf_pmu *pmu, co= nst char *name, unit =3D pe->unit; perpkg =3D pe->perpkg; deprecated =3D pe->deprecated; - pmu_name =3D pe->pmu; + if (pe->pmu && strcmp(pe->pmu, "default_core")) + pmu_name =3D pe->pmu; } =20 alias =3D zalloc(sizeof(*alias)); --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 00:43:17 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 16F3A568A for ; Fri, 8 Mar 2024 00:19:43 +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=1709857184; cv=none; b=Fkkr+Gpz21rsbwd+v9SpaX3zIxp8r9gtvC8zMjLcKy7XqQV5JhBjyCimViyhmMim+W18ZSLXcaO0QIVwE1u85J6XpjM+5FzXYZiyjwxiwHD0qnUQxisMp49mAen0h4qbl02M4vOHdL071G/f7Vc+YRPUOU49ixZ0SVl83cVODIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857184; c=relaxed/simple; bh=FRTaxqQ9z0fdBOTvorH6lKFlBCFvX2RUJshMGjEelbw=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=q509FakfstHy3SUA/kzT32VScCjqt2umUlcqvOekMXaoOnkTJWaaaxTFhtOHa0Ehq76XSiyJ4LMWpZMyqz6PBIQbfvuj0MDhKGj33eti02ds6ryQfKUl9OiDJR5FiwZtf0cFfFQ1QHEJWYkTIVSMt6yyyuHXytgpfr/K3LHjfdA= 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=pIkvQnQI; 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="pIkvQnQI" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dbe9e13775aso2539690276.1 for ; Thu, 07 Mar 2024 16:19:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857182; x=1710461982; 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=GMafHwnxZN4CIEYFiJO7IENRNxeo2KK0p3Rv7PcNfpc=; b=pIkvQnQIWFxNjYJNyjvMsnfG4CsaRWlnjpM/gDrLqTO35Y3Xp+G51s7QoiwSl6XSUx CubaXRgY1mqdxO9cImQC1OFCqtVU46K77QWORxLr9j/RlswtREscTEoqIWYcdqLm/y9R x2r0r9neCJ2vkXigtbuYXindTKpRd7Byqo6DPKWmVJE4gcgVKiXI8uxfx1D+5OUnvtH7 JERjBdz+3+qz630bxjMiS8Ui1W27wj0+gZRzmls9eidTIU8P6VyCq3+nwEyJwNltuTma r49bl8T1ddDrasTYjfOZFu7wkqTYVEmDm9oo5BHB2+Tc7gvBeInJISOAXZFLd2IzuKxK WCbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857182; x=1710461982; 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=GMafHwnxZN4CIEYFiJO7IENRNxeo2KK0p3Rv7PcNfpc=; b=GMoywfwsO92rd9yCyHoUAznwiAC9Lg3DOvEK7yOScEyIYnrYFDvXrQhpxseHBMPfzT QzQ+md0CrxwJPQFR0Z6fFXLe5G2+HuSRAkElhC0qIsUJ89U3GPTJesWqFypw/1ZfJxHF bo4Cayu90pKYWHwR6zr4eEvlMVlqQj3SzzKfvSdDALgjePfZHJo/bi4XH8+vT3zvx9lJ yImyNTe8Df8+ZFlyHlpL+x7NviYxZfoGRk8H2K2dbzodYg32MPBjKfJBcs3MHzHSvGKP 2ZzKYjVmQqLWKOlgUDOvhV7hmuBcwI31mktDAHpHzX/30TEyiBe7w38ygTATLNf2/LMh rRQA== X-Forwarded-Encrypted: i=1; AJvYcCU0Vmax+phVl0bqzEtCtb/bskxp9eoY/P5YGOFEhvKVM2Er8yIdJYRf/IB5Uty4Mht501IWgjp7ozdSt4feYA/AlWuE+9vfMWxvWiWa X-Gm-Message-State: AOJu0YxleiqnCkBhBBXZs78f0whLx73D5dVDtjeWUyAl42v42pBdPRgD dN1VuM247dJkS77wHd6tplUYHVFWMHojRqoD1oeorOH0EnyU6STLXGkZigyJuXcq39LWnt2X5k7 xNlgm7Q== X-Google-Smtp-Source: AGHT+IGZxH2VZwUiw1GgVvXnRBpm+B1jZaK1xeAq56iEuY9fI4p8nAEwAgnGzMx47spPAqo13VuXbW27mppI X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a05:6902:1004:b0:dc7:42:ecd with SMTP id w4-20020a056902100400b00dc700420ecdmr4897415ybt.6.1709857182253; Thu, 07 Mar 2024 16:19:42 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:12 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 3/6] perf list: Allow wordwrap to wrap on commas From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A raw event encoding may be a block with terms separated by commas. If wrapping such a string it would be useful to break at the commas, so add this ability to wordwrap. Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/builtin-list.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c index 02bf608d585e..e0fe3d178d63 100644 --- a/tools/perf/builtin-list.c +++ b/tools/perf/builtin-list.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include =20 @@ -76,26 +77,38 @@ static void default_print_start(void *ps) =20 static void default_print_end(void *print_state __maybe_unused) {} =20 +static const char *skip_spaces_or_commas(const char *str) +{ + while (isspace(*str) || *str =3D=3D ',') + ++str; + return str; +} + static void wordwrap(FILE *fp, const char *s, int start, int max, int corr) { int column =3D start; int n; bool saw_newline =3D false; + bool comma =3D false; =20 while (*s) { - int wlen =3D strcspn(s, " \t\n"); + int wlen =3D strcspn(s, " ,\t\n"); + const char *sep =3D comma ? "," : " "; =20 if ((column + wlen >=3D max && column > start) || saw_newline) { - fprintf(fp, "\n%*s", start, ""); + fprintf(fp, comma ? ",\n%*s" : "\n%*s", start, ""); column =3D start + corr; } - n =3D fprintf(fp, "%s%.*s", column > start ? " " : "", wlen, s); + if (column <=3D start) + sep =3D ""; + n =3D fprintf(fp, "%s%.*s", sep, wlen, s); if (n <=3D 0) break; saw_newline =3D s[wlen] =3D=3D '\n'; s +=3D wlen; + comma =3D s[0] =3D=3D ','; column +=3D n; - s =3D skip_spaces(s); + s =3D skip_spaces_or_commas(s); } } =20 --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 00:43:17 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 9A9C4FBED for ; Fri, 8 Mar 2024 00:19:45 +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=1709857187; cv=none; b=ko1BbtZ7hBgXLLX8wtzOmEwlkdo4WrYKR0bIxiz1G5lCXYvwcSMwkfZtlrRZYL32uGfNkQoGF3LzEBAjOmZpqfiqb5QE6O0Btu5A6AZFgUB206aUXIgFs3HkMZJZsZ7EXsrjVDHRbdk1Iot/G/M9Y/4nakBK2tjCZWIZkxbzu28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857187; c=relaxed/simple; bh=rmbRKlb2vBzSHZMNaT8weYEcJ5jh/TsECzXwG5zHVJI=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=HhLHjuLbSM45RcGkgrrXYpnBvoce+zYhcAyuAatsXyq74mMf7EJugW19uMUefhMnREARmFmb7jSbBhZppqOYDIvQoqaFIH6t/PVcAoplIq3WiiblGCx2g0ts77WRlVZrHXA3SvC7FLsrV8h6LtuIz/TazLt9I8XWykAUFZiR/QM= 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=Ge34s8pH; 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="Ge34s8pH" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-609c800881fso25891187b3.0 for ; Thu, 07 Mar 2024 16:19:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857184; x=1710461984; 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=6mfNvkJfntBmtMbV7xiy0gPZgImuCiMELZ3US+yokug=; b=Ge34s8pHTrbwIxVIXdDHy+zNEVcW1xY0HLpwvv5sXC8yBVJBwKJ4A81cPaMQI8IBH8 qiv4MgSnXKZNj+3obB6HocG8Y1Uy6Pdl4fJF7gLUDhnpcvuNOW5RtWlXs8EBS/qcqcEM lu7KMt1h64O/ly/npJqZn93kW78MANzSXZU9+hIx0sYLc0WD1G8vIlKbT9JjfsG5u9AZ QWZ8rRhpJ/Do7KisP6guaCG6RyZsNp6plKSuEw/kxrbbFvK95oZH5YPEAM6bOQcqSnCj ltzouxdHjnqvt35o+JXq5hQnfz8Zq+hvrdXxfHKrVMVeqiokfcwXkChDdonF3G8YgyBR XEwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857184; x=1710461984; 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=6mfNvkJfntBmtMbV7xiy0gPZgImuCiMELZ3US+yokug=; b=atmhDYYjSLj7VKQXxRFL6FWiyA1EUr0nBKzq/97uzQIM8+NYZqu8i6apk21zh0Z/7h qknvU+oHVgbhEcbyNMbtSfH/bbTEyaBMRra21/WHWsyl3jMMtNb9xAYf4pcq8i7NCEDw KrjlEsINPM9/Rd+EeG7cBbNiZ2HMs3Y1urx0gA7eCXCW/8v3v0aTzmHPsCrfhh+JDqxr FiJgJRtwh+uRL1m9p+OmE2jmqBA+zD1SQOW4LOCGHmv3u8+pyp6DnNYwGmyuKHl8LDW6 sD6nV8RquSlN+8QJ6u7SqwqLtDtKH8pVo1NGmf2iOKxrlLCZIxDlFSC0mA/ww4Aku7jA CEYw== X-Forwarded-Encrypted: i=1; AJvYcCWdodsaiB/90EXJ79s56j1+9u95cfRFNhH5ATLWWBDOGfrl6ZGiqXyY/sVOotb5dp7ROhS8L4+Bu6OIjazoKVx6FV6kCqkaKJ8BqJLA X-Gm-Message-State: AOJu0YzA0QLfrn5CLzTgfhnIBQRO3itMDROtxVNdngS0J8VVQpGr/u82 fkVacNh+pwr+prPU08nVbA5oL50f/KXTZXCuCmXxKL6eMB5BaEK6orbvE+G9bD6t+BiefEUFpR2 +g7t1vQ== X-Google-Smtp-Source: AGHT+IFaZR9Z8hulAM1Y2uvU+ypo/bYXrY2uQVVC8e1C30BrzHUtCfKDHRP0Tmnh0TfRPMOFUMX5pahH4atS X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a81:de45:0:b0:609:df01:bdb7 with SMTP id o5-20020a81de45000000b00609df01bdb7mr1373877ywl.8.1709857184657; Thu, 07 Mar 2024 16:19:44 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:13 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 4/6] perf list: Give more details about raw event encodings From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" List all the PMUs, not just the first core one, and list real format specifiers with value ranges. Before: ``` $ perf list ... rNNN [Raw hardware event de= scriptor] cpu/t1=3Dv1[,t2=3Dv2,t3 ...]/modifier [Raw hardware even= t descriptor] [(see 'man perf-list' on how to encode it)] mem:[/len][:access] [Hardware breakpoint] ... ``` After: ``` $ perf list ... rNNN [Raw event descriptor] cpu/event=3D0..255,pc,edge,.../modifier [Raw event descripto= r] [(see 'man perf-list' or 'man perf-record' on how to encode it)] breakpoint//modifier [Raw event descriptor] cstate_core/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] cstate_pkg/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] i915/i915_eventid=3D0..0x1fffff/modifier [Raw event descripto= r] intel_bts//modifier [Raw event descriptor] intel_pt/ptw,event,cyc_thresh=3D0..15,.../modifier [Raw event descripto= r] kprobe/retprobe/modifier [Raw event descriptor] msr/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] power/event=3D0..255/modifier [Raw event descripto= r] software//modifier [Raw event descriptor] tracepoint//modifier [Raw event descriptor] uncore_arb/event=3D0..255,edge,inv,.../modifier [Raw event descripto= r] uncore_cbox/event=3D0..255,edge,inv,.../modifier [Raw event descripto= r] uncore_clock/event=3D0..255/modifier [Raw event descripto= r] uncore_imc_free_running/event=3D0..255,umask=3D0..255/modifier[Raw event = descriptor] uprobe/ref_ctr_offset=3D0..0xffffffff,retprobe/modifier[Raw event descrip= tor] mem:[/len][:access] [Hardware breakpoint] ... ``` With '--details' provide more details on the formats encoding: ``` cpu/event=3D0..255,pc,edge,.../modifier [Raw event descripto= r] [(see 'man perf-list' or 'man perf-record' on how to encode it)] cpu/event=3D0..255,pc,edge,offcore_rsp=3D0..0xffffffffffffffff,ldla= t=3D0..0xffff,inv, umask=3D0..255,frontend=3D0..0xffffff,cmask=3D0..255,config=3D0..0x= ffffffffffffffff, config1=3D0..0xffffffffffffffff,config2=3D0..0xffffffffffffffff,con= fig3=3D0..0xffffffffffffffff, name=3Dstring,period=3Dnumber,freq=3Dnumber,branch_type=3D(u|k|hv|a= ny|...),time, call-graph=3D(fp|dwarf|lbr),stack-size=3Dnumber,max-stack=3Dnumber,= nr=3Dnumber,inherit,no-inherit, overwrite,no-overwrite,percore,aux-output,aux-sample-size=3Dnumber/= modifier breakpoint//modifier [Raw event descriptor] breakpoint//modifier cstate_core/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] cstate_core/event=3D0..0xffffffffffffffff/modifier cstate_pkg/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] cstate_pkg/event=3D0..0xffffffffffffffff/modifier i915/i915_eventid=3D0..0x1fffff/modifier [Raw event descripto= r] i915/i915_eventid=3D0..0x1fffff/modifier intel_bts//modifier [Raw event descriptor] intel_bts//modifier intel_pt/ptw,event,cyc_thresh=3D0..15,.../modifier [Raw event descripto= r] intel_pt/ptw,event,cyc_thresh=3D0..15,pt,notnt,branch,tsc,pwr_evt,f= up_on_ptw,cyc,noretcomp, mtc,psb_period=3D0..15,mtc_period=3D0..15/modifier kprobe/retprobe/modifier [Raw event descriptor] kprobe/retprobe/modifier msr/event=3D0..0xffffffffffffffff/modifier [Raw event descripto= r] msr/event=3D0..0xffffffffffffffff/modifier power/event=3D0..255/modifier [Raw event descripto= r] power/event=3D0..255/modifier software//modifier [Raw event descriptor] software//modifier tracepoint//modifier [Raw event descriptor] tracepoint//modifier uncore_arb/event=3D0..255,edge,inv,.../modifier [Raw event descripto= r] uncore_arb/event=3D0..255,edge,inv,umask=3D0..255,cmask=3D0..31/mod= ifier uncore_cbox/event=3D0..255,edge,inv,.../modifier [Raw event descripto= r] uncore_cbox/event=3D0..255,edge,inv,umask=3D0..255,cmask=3D0..31/mo= difier uncore_clock/event=3D0..255/modifier [Raw event descripto= r] uncore_clock/event=3D0..255/modifier uncore_imc_free_running/event=3D0..255,umask=3D0..255/modifier[Raw event = descriptor] uncore_imc_free_running/event=3D0..255,umask=3D0..255/modifier uprobe/ref_ctr_offset=3D0..0xffffffff,retprobe/modifier[Raw event descrip= tor] uprobe/ref_ctr_offset=3D0..0xffffffff,retprobe/modifier ``` Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/util/pmu.c | 61 +++++++++++++++++++++- tools/perf/util/pmu.h | 3 ++ tools/perf/util/pmus.c | 94 ++++++++++++++++++++++++++++++++++ tools/perf/util/pmus.h | 1 + tools/perf/util/print-events.c | 20 +------- 5 files changed, 160 insertions(+), 19 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 24be587e3537..e24bc3b8f696 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1603,6 +1603,61 @@ bool perf_pmu__has_format(const struct perf_pmu *pmu= , const char *name) return false; } =20 +int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_forma= t_callback cb) +{ + static const char *const terms[] =3D { + "config=3D0..0xffffffffffffffff", + "config1=3D0..0xffffffffffffffff", + "config2=3D0..0xffffffffffffffff", + "config3=3D0..0xffffffffffffffff", + "name=3Dstring", + "period=3Dnumber", + "freq=3Dnumber", + "branch_type=3D(u|k|hv|any|...)", + "time", + "call-graph=3D(fp|dwarf|lbr)", + "stack-size=3Dnumber", + "max-stack=3Dnumber", + "nr=3Dnumber", + "inherit", + "no-inherit", + "overwrite", + "no-overwrite", + "percore", + "aux-output", + "aux-sample-size=3Dnumber", + }; + struct perf_pmu_format *format; + int ret; + + /* + * max-events and driver-config are missing above as are the internal + * types user, metric-id, raw, legacy cache and hardware. Assert against + * the enum parse_events__term_type so they are kept in sync. + */ + _Static_assert(ARRAY_SIZE(terms) =3D=3D __PARSE_EVENTS__TERM_TYPE_NR - 6); + list_for_each_entry(format, &pmu->format, list) { + perf_pmu_format__load(pmu, format); + ret =3D cb(state, format->name, (int)format->value, format->bits); + if (ret) + return ret; + } + if (!pmu->is_core) + return 0; + + for (size_t i =3D 0; i < ARRAY_SIZE(terms); i++) { + int config =3D PERF_PMU_FORMAT_VALUE_CONFIG; + + if (i < PERF_PMU_FORMAT_VALUE_CONFIG_END) + config =3D i; + + ret =3D cb(state, terms[i], config, /*bits=3D*/NULL); + if (ret) + return ret; + } + return 0; +} + bool is_pmu_core(const char *name) { return !strcmp(name, "cpu") || !strcmp(name, "cpum_cf") || is_sysfs_pmu_c= ore(name); @@ -1697,8 +1752,12 @@ int perf_pmu__for_each_event(struct perf_pmu *pmu, b= ool skip_duplicate_pmus, pmu_add_cpu_aliases(pmu); list_for_each_entry(event, &pmu->aliases, list) { size_t buf_used; + int pmu_name_len; =20 info.pmu_name =3D event->pmu_name ?: pmu->name; + pmu_name_len =3D skip_duplicate_pmus + ? pmu_name_len_no_suffix(info.pmu_name, /*num=3D*/NULL) + : (int)strlen(info.pmu_name); info.alias =3D NULL; if (event->desc) { info.name =3D event->name; @@ -1723,7 +1782,7 @@ int perf_pmu__for_each_event(struct perf_pmu *pmu, bo= ol skip_duplicate_pmus, info.encoding_desc =3D buf + buf_used; parse_events_terms__to_strbuf(&event->terms, &sb); buf_used +=3D snprintf(buf + buf_used, sizeof(buf) - buf_used, - "%s/%s/", info.pmu_name, sb.buf) + 1; + "%.*s/%s/", pmu_name_len, info.pmu_name, sb.buf) + 1; info.topic =3D event->topic; info.str =3D sb.buf; info.deprecated =3D event->deprecated; diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index e35d985206db..9f5284b29ecf 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -196,6 +196,8 @@ struct pmu_event_info { }; =20 typedef int (*pmu_event_callback)(void *state, struct pmu_event_info *info= ); +typedef int (*pmu_format_callback)(void *state, const char *name, int conf= ig, + const unsigned long *bits); =20 void pmu_add_sys_aliases(struct perf_pmu *pmu); int perf_pmu__config(struct perf_pmu *pmu, struct perf_event_attr *attr, @@ -215,6 +217,7 @@ int perf_pmu__find_event(struct perf_pmu *pmu, const ch= ar *event, void *state, p int perf_pmu__format_parse(struct perf_pmu *pmu, int dirfd, bool eager_loa= d); void perf_pmu_format__set_value(void *format, int config, unsigned long *b= its); bool perf_pmu__has_format(const struct perf_pmu *pmu, const char *name); +int perf_pmu__for_each_format(struct perf_pmu *pmu, void *state, pmu_forma= t_callback cb); =20 bool is_pmu_core(const char *name); bool perf_pmu__supports_legacy_cache(const struct perf_pmu *pmu); diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index 16505071d362..2fd369e45832 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -16,6 +16,7 @@ #include "pmus.h" #include "pmu.h" #include "print-events.h" +#include "strbuf.h" =20 /* * core_pmus: A PMU belongs to core_pmus if it's name is "cpu" or it's sy= sfs @@ -503,6 +504,99 @@ void perf_pmus__print_pmu_events(const struct print_ca= llbacks *print_cb, void *p zfree(&aliases); } =20 +struct build_format_string_args { + struct strbuf short_string; + struct strbuf long_string; + int num_formats; +}; + +static int build_format_string(void *state, const char *name, int config, + const unsigned long *bits) +{ + struct build_format_string_args *args =3D state; + unsigned int num_bits; + int ret1, ret2 =3D 0; + + (void)config; + args->num_formats++; + if (args->num_formats > 1) { + strbuf_addch(&args->long_string, ','); + if (args->num_formats < 4) + strbuf_addch(&args->short_string, ','); + } + num_bits =3D bits ? bitmap_weight(bits, PERF_PMU_FORMAT_BITS) : 0; + if (num_bits <=3D 1) { + ret1 =3D strbuf_addf(&args->long_string, "%s", name); + if (args->num_formats < 4) + ret2 =3D strbuf_addf(&args->short_string, "%s", name); + } else if (num_bits > 8) { + ret1 =3D strbuf_addf(&args->long_string, "%s=3D0..0x%llx", name, + ULLONG_MAX >> (64 - num_bits)); + if (args->num_formats < 4) { + ret2 =3D strbuf_addf(&args->short_string, "%s=3D0..0x%llx", name, + ULLONG_MAX >> (64 - num_bits)); + } + } else { + ret1 =3D strbuf_addf(&args->long_string, "%s=3D0..%llu", name, + ULLONG_MAX >> (64 - num_bits)); + if (args->num_formats < 4) { + ret2 =3D strbuf_addf(&args->short_string, "%s=3D0..%llu", name, + ULLONG_MAX >> (64 - num_bits)); + } + } + return ret1 < 0 ? ret1 : (ret2 < 0 ? ret2 : 0); +} + +void perf_pmus__print_raw_pmu_events(const struct print_callbacks *print_c= b, void *print_state) +{ + bool skip_duplicate_pmus =3D print_cb->skip_duplicate_pmus(print_state); + struct perf_pmu *(*scan_fn)(struct perf_pmu *); + struct perf_pmu *pmu =3D NULL; + + if (skip_duplicate_pmus) + scan_fn =3D perf_pmus__scan_skip_duplicates; + else + scan_fn =3D perf_pmus__scan; + + while ((pmu =3D scan_fn(pmu)) !=3D NULL) { + struct build_format_string_args format_args =3D { + .short_string =3D STRBUF_INIT, + .long_string =3D STRBUF_INIT, + .num_formats =3D 0, + }; + int len =3D pmu_name_len_no_suffix(pmu->name, /*num=3D*/NULL); + const char *desc =3D "(see 'man perf-list' or 'man perf-record' on how t= o encode it)"; + + if (!pmu->is_core) + desc =3D NULL; + + strbuf_addf(&format_args.short_string, "%.*s/", len, pmu->name); + strbuf_addf(&format_args.long_string, "%.*s/", len, pmu->name); + perf_pmu__for_each_format(pmu, &format_args, build_format_string); + + if (format_args.num_formats > 3) + strbuf_addf(&format_args.short_string, ",.../modifier"); + else + strbuf_addf(&format_args.short_string, "/modifier"); + + strbuf_addf(&format_args.long_string, "/modifier"); + print_cb->print_event(print_state, + /*topic=3D*/NULL, + /*pmu_name=3D*/NULL, + format_args.short_string.buf, + /*event_alias=3D*/NULL, + /*scale_unit=3D*/NULL, + /*deprecated=3D*/false, + "Raw event descriptor", + desc, + /*long_desc=3D*/NULL, + format_args.long_string.buf); + + strbuf_release(&format_args.short_string); + strbuf_release(&format_args.long_string); + } +} + bool perf_pmus__have_event(const char *pname, const char *name) { struct perf_pmu *pmu =3D perf_pmus__find(pname); diff --git a/tools/perf/util/pmus.h b/tools/perf/util/pmus.h index 94d2a08d894b..eec599d8aebd 100644 --- a/tools/perf/util/pmus.h +++ b/tools/perf/util/pmus.h @@ -18,6 +18,7 @@ struct perf_pmu *perf_pmus__scan_core(struct perf_pmu *pm= u); const struct perf_pmu *perf_pmus__pmu_for_pmu_filter(const char *str); =20 void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, v= oid *print_state); +void perf_pmus__print_raw_pmu_events(const struct print_callbacks *print_c= b, void *print_state); bool perf_pmus__have_event(const char *pname, const char *name); int perf_pmus__num_core_pmus(void); bool perf_pmus__supports_extended_type(void); diff --git a/tools/perf/util/print-events.c b/tools/perf/util/print-events.c index e0d2b49bab66..3f38c27f0157 100644 --- a/tools/perf/util/print-events.c +++ b/tools/perf/util/print-events.c @@ -39,7 +39,7 @@ static const char * const event_type_descriptors[] =3D { "Software event", "Tracepoint event", "Hardware cache event", - "Raw hardware event descriptor", + "Raw event descriptor", "Hardware breakpoint", }; =20 @@ -416,8 +416,6 @@ void print_symbol_events(const struct print_callbacks *= print_cb, void *print_sta */ void print_events(const struct print_callbacks *print_cb, void *print_stat= e) { - char *tmp; - print_symbol_events(print_cb, print_state, PERF_TYPE_HARDWARE, event_symbols_hw, PERF_COUNT_HW_MAX); print_symbol_events(print_cb, print_state, PERF_TYPE_SOFTWARE, @@ -441,21 +439,7 @@ void print_events(const struct print_callbacks *print_= cb, void *print_state) /*long_desc=3D*/NULL, /*encoding_desc=3D*/NULL); =20 - if (asprintf(&tmp, "%s/t1=3Dv1[,t2=3Dv2,t3 ...]/modifier", - perf_pmus__scan_core(/*pmu=3D*/NULL)->name) > 0) { - print_cb->print_event(print_state, - /*topic=3D*/NULL, - /*pmu_name=3D*/NULL, - tmp, - /*event_alias=3D*/NULL, - /*scale_unit=3D*/NULL, - /*deprecated=3D*/false, - event_type_descriptors[PERF_TYPE_RAW], - "(see 'man perf-list' on how to encode it)", - /*long_desc=3D*/NULL, - /*encoding_desc=3D*/NULL); - free(tmp); - } + perf_pmus__print_raw_pmu_events(print_cb, print_state); =20 print_cb->print_event(print_state, /*topic=3D*/NULL, --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 00:43:17 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 BF70D13AF2 for ; Fri, 8 Mar 2024 00:19:47 +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=1709857189; cv=none; b=oEbKLPk+Na5DlgqfOLcwjEYJ4XvpWqLilPxMOldcuWpHE2rdoT54rKj+2ID6LGzHt8ivFdPsCthgG8eeG1H+CcUt+fxh42MN2XF4UOKx3c8g26LC797lPcg54sQb9SxO830kYaHNmXurVkK10viIXtAWMhoZielzOzK4VKTK2Yo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857189; c=relaxed/simple; bh=qRbM4J1nMnCOTtjpsDerekpdTUM2CRL3YgboxCf8VXI=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=THcflBY6x+QXh6Zy2ZzCmT3INq1AHYZua0dq30FfBkr7ZVHYRVTjB7a3oR3T05+PxhUtpdKsb8VN2ewtwnus9bFzKdvZsPThouw/g7CUYELhDbLZPHsTQtGruXGX4gGkQw+1WtIAR01iEEiSGYJuXCfcW6PsLDP9eZNy/UStVcw= 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=nFTx2lMC; 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="nFTx2lMC" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-609e2b87a6bso25601797b3.3 for ; Thu, 07 Mar 2024 16:19:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857187; x=1710461987; 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=WnCRzMIwEmUWcP4taw0TGh+kO0P1YkAyutoR+GaoeIk=; b=nFTx2lMCMk0ii5Y9Sv12Do9RxicDmi34+BWvgqM0YHYQQhjS8cXXkeiN0RXQm/xAMx WcP1aV/hHjz+7MY5VQHZ4zeA9QDKJHUVoThebsxyC6/uyqHfT68WBU1zEX7R/+vDbp19 t0aXfNr45ZPMZtgfVLiOFN+/Eyavi1bh/ZbEaQTkFbRUS3LlW8WzcX5gJluS+gbZwa+F 8i671RQvmhd3nBfaJ8wJjXyg0ZglbaDAx0ev7H55qOOlSSmyKtlE4Nxg8sCuJRssSCB7 UQEibIvaCnaCV+g3V4BUa+rjqkcscjHBIrSToVwUgLdX9CfZ4q00UQYIB+zdVFnn3MqQ wMIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857187; x=1710461987; 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=WnCRzMIwEmUWcP4taw0TGh+kO0P1YkAyutoR+GaoeIk=; b=NtBLgZwgzQoymhn96GCqBOw4hT72oXOcSIZ5Xf+jKGee8O9YJd8uk+mqviMG3dsvl4 cZAT/ubgatZnoR7KDFX5uVgeJJNZXlGgjCVUYBUUzhO1QePsVvSIiHzMqOO6xs4L1pLF jc0yFmgQoeF0CBVF+gLOAfnisTGz9E2diIrlChDXjZXTIY4K7Rud+z4YYBpgZuCAqX92 3gD4CuUZWJVYPFaBSRmcs6tD/FNGUsuoyDWbbYCvpeo4MJD4G89ObU/lQGxmBnyyRDZc /tn0NjTuDjD/OD8jXhl3H/9oeZDwuwhAEde6BX8OuY39yIwmTpu4wnPyH+gOu+3fS/bJ +iPg== X-Forwarded-Encrypted: i=1; AJvYcCWJaOoZ0EUFhYqhCEmfNzrUAj75ok7dv/90S2lpfM2X7r9EzvT8CGomDKx2dB38UUgOgvmrKUKOUmwaKOFjXo4swQUTyyvSRQ2N3tnZ X-Gm-Message-State: AOJu0Yw/BD0PfWXe5pOt8ekwMs9mtGGQt1cOqpIXe7YF546qIUrKpmvN B1gvr8M+fgYacOJHRu/q0tnrKRfUcFCQS3bduCPyjtO37xnXMCQOwIiIwZ9EDStXLsZM4FrZOJG P3r3NYw== X-Google-Smtp-Source: AGHT+IHJCTyaNqBxaTLU14hVtz+CLHQZ93ZrH5zbxunYvvExtWwXEhrwq/UeDgTB3Xlg6ocZjXgQewrFG8Hr X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a0d:e643:0:b0:609:fbb4:3076 with SMTP id p64-20020a0de643000000b00609fbb43076mr598138ywe.3.1709857186828; Thu, 07 Mar 2024 16:19:46 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:14 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 5/6] perf tools: Use pmus to describe type from attribute From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When dumping a perf_event_attr, use pmus to find the PMU and its name by the type number. This allows dynamically added PMUs to be described. Before: ``` $ perf stat -vv -e data_read true ... perf_event_attr: type 24 size 136 config 0x20ff sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 ... ``` After: ``` $ perf stat -vv -e data_read true ... perf_event_attr: type 24 (uncore_imc_free_running_0) size 136 config 0x20ff sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 ... ``` However, it also means that when we have a PMU name we prefer it to a hard coded name: Before: ``` $ perf stat -vv -e faults true ... perf_event_attr: type 1 (PERF_TYPE_SOFTWARE) size 136 config 0x2 (PERF_COUNT_SW_PAGE_FAULTS) sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 enable_on_exec 1 exclude_guest 1 ... ``` After: ``` $ perf stat -vv -e faults true ... perf_event_attr: type 1 (software) size 136 config 0x2 (PERF_COUNT_SW_PAGE_FAULTS) sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 enable_on_exec 1 exclude_guest 1 ... ``` It feels more consistent to do this, rather than only prefer a PMU name when a hard coded name isn't available. Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/util/perf_event_attr_fprintf.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/perf_event_attr_fprintf.c b/tools/perf/util/pe= rf_event_attr_fprintf.c index 8f04d3b7f3ec..29e66835da3a 100644 --- a/tools/perf/util/perf_event_attr_fprintf.c +++ b/tools/perf/util/perf_event_attr_fprintf.c @@ -7,6 +7,8 @@ #include #include #include "util/evsel_fprintf.h" +#include "util/pmu.h" +#include "util/pmus.h" #include "trace-event.h" =20 struct bit_names { @@ -75,9 +77,12 @@ static void __p_read_format(char *buf, size_t size, u64 = value) } =20 #define ENUM_ID_TO_STR_CASE(x) case x: return (#x); -static const char *stringify_perf_type_id(u64 value) +static const char *stringify_perf_type_id(struct perf_pmu *pmu, u32 type) { - switch (value) { + if (pmu) + return pmu->name; + + switch (type) { ENUM_ID_TO_STR_CASE(PERF_TYPE_HARDWARE) ENUM_ID_TO_STR_CASE(PERF_TYPE_SOFTWARE) ENUM_ID_TO_STR_CASE(PERF_TYPE_TRACEPOINT) @@ -175,9 +180,9 @@ do { \ #define print_id_unsigned(_s) PRINT_ID(_s, "%"PRIu64) #define print_id_hex(_s) PRINT_ID(_s, "%#"PRIx64) =20 -static void __p_type_id(char *buf, size_t size, u64 value) +static void __p_type_id(struct perf_pmu *pmu, char *buf, size_t size, u64 = value) { - print_id_unsigned(stringify_perf_type_id(value)); + print_id_unsigned(stringify_perf_type_id(pmu, value)); } =20 static void __p_config_hw_id(char *buf, size_t size, u64 value) @@ -246,7 +251,7 @@ static void __p_config_id(char *buf, size_t size, u32 t= ype, u64 value) #define p_sample_type(val) __p_sample_type(buf, BUF_SIZE, val) #define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, va= l) #define p_read_format(val) __p_read_format(buf, BUF_SIZE, val) -#define p_type_id(val) __p_type_id(buf, BUF_SIZE, val) +#define p_type_id(val) __p_type_id(pmu, buf, BUF_SIZE, val) #define p_config_id(val) __p_config_id(buf, BUF_SIZE, attr->type, val) =20 #define PRINT_ATTRn(_n, _f, _p, _a) \ @@ -262,6 +267,7 @@ do { \ int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr, attr__fprintf_f attr__fprintf, void *priv) { + struct perf_pmu *pmu =3D perf_pmus__find_by_type(attr->type); char buf[BUF_SIZE]; int ret =3D 0; =20 --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 00:43:17 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 F13111CD15 for ; Fri, 8 Mar 2024 00:19:49 +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=1709857191; cv=none; b=tcVuTeUhTzYul0SUDPENJ8wM3PmsLh6++GaMGooFFIGlkijkt7zcXR6RAWu6F+Za6O/32K1EV3nKvE4P+7luFe33jWvQIJDakFk4mg8fiYbAn/XrinVeYc7Zll2jSd4ZojOi+3DRTH+QbJpFNr9kqvDU09w0Yr8F+z1M7e+X19I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709857191; c=relaxed/simple; bh=elK0Xs+m/oAU3QVrIgg0bRnVn1Wp0yji7Lirhn51ur8=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=k8EoyU7QwyyYJbWKzw/hESop9OveGySHjZOeVBmX8D8CaA/f58G/0wrfl8KMLKFN5WA2AdyEt9EX/QchoZFizNg16COQnjCllbTv4MVCbrh2w3TAEVFSmd2qyjQ/nrJjW1mzLC1mC/UJIIBawl4dDREiMd5e3p3b9thbpQEwQkY= 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=Drj2RPID; 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="Drj2RPID" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-60987370f06so5712327b3.1 for ; Thu, 07 Mar 2024 16:19:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1709857189; x=1710461989; 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=fHILL1gTCxm4QF9OC7v7hNL2u1lMsUcHDUfAM6Pn4Kw=; b=Drj2RPIDd55nY7YDmzY4v+g0n3cWp51aSC4U36n9vzsqC9usS1wvdD9Be1EbHv4udW nBWCzBg2p56RArZ3Zahd0HkRc6ZvxhXWQV0lY3RJEOfMY/XMXg6RI+zdplWu6SYbkHwt 1oYxKE332ndT8qyPtoiNoEqUIV9PviFktYnX/024o4Brh8CxzU3PtIepO2XFMytbnfBd qgBnQ/gfjuv2Nt+acrU6qY1IwoJoHLKXIP5bDuMZn6DFCz2Zbg4BFGC76K7bfFN3v0nI esS0n0rnrqKJyxudsrH54XlsKo0c1wr9l5SIjNhYx6yipjF/M9foiNV+SIzagqGrfBz8 1eVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709857189; x=1710461989; 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=fHILL1gTCxm4QF9OC7v7hNL2u1lMsUcHDUfAM6Pn4Kw=; b=gkPF6pjHGyc0l/KYLME5cBByWtbpVfjrnp6h8r7syDl4dB0uKY3jx8auvDbCnr5AY2 DykhYaWFot6Rd1D8utOB128WOL8dE7pFSJTvRyiG/P+1IRGgN1+Rs8SQjIU21A0v9vah LzCtVpeb7KWk6QU75PI1TjoHufAG5jjAE89odVReqSCSNj9e9toEq5s1snp5J9LckBHo VtVOp/XRIPvrvMyWEgwXj3Rgwsho14MvD9BLvG1ZnHHa2pDgoCKb6jMRnODrtlHO+9/r vg3gXY7+u86AAO0MIdu+URMzMiOhPyQWUv3DFdbxaqp/439XuAk9Pel9nUTXNRGcslaq nMKA== X-Forwarded-Encrypted: i=1; AJvYcCV4lPUZvyPhkofqEW0Xc+1DpuilizThmgs6UbAKf4bFla/nNGyhw4l4KbmT1jxtNWprfJe+rCZqpaq5ntTH8LpnABJ3ICxFZNNULNbb X-Gm-Message-State: AOJu0YyvkDZBKn5sP4/YPYbNqB9IHcDph7zP6rj4UwL4kzkKwYUR6/kF uMrNMvjoRRz7nCK8FHxgScGkhhQ0Y9Imp4L3jbk7uMiPP1l5OgGlQv3bBqf9ebKyIeP2RFweSkO Fmh2V6g== X-Google-Smtp-Source: AGHT+IHfYCLrCxH6IMYKIHQMOCbjZR2PuEAhqv5gdFqF8CzTI7yhvZtUX8woAvon6/3IiKe5aOPZmDaO0xi3 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:218f:92ee:d543:c1a2]) (user=irogers job=sendgmr) by 2002:a81:9b97:0:b0:609:3c53:d489 with SMTP id s145-20020a819b97000000b006093c53d489mr4063810ywg.3.1709857189029; Thu, 07 Mar 2024 16:19:49 -0800 (PST) Date: Thu, 7 Mar 2024 16:19:15 -0800 In-Reply-To: <20240308001915.4060155-1-irogers@google.com> Message-Id: <20240308001915.4060155-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: <20240308001915.4060155-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 6/6] perf tools: Add/use PMU reverse lookup from config to name From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Yang Jihong , Kan Liang , James Clark , Ravi Bangoria , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add perf_pmu__name_from_config that does a reverse lookup from a config number to an alias name. The lookup is expensive as the config is computed for every alias by filling in a perf_event_attr, but this is only done when verbose output is enabled. The lookup also only considers config, and not config1, config2 or config3. An example of the output: ``` $ perf stat -vv -e data_read true ... perf_event_attr: type 24 (uncore_imc_free_running_0) size 136 config 0x20ff (data_read) sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 ... ``` Signed-off-by: Ian Rogers Tested-by: Kan Liang --- tools/perf/util/perf_event_attr_fprintf.c | 10 ++++++++-- tools/perf/util/pmu.c | 18 ++++++++++++++++++ tools/perf/util/pmu.h | 1 + 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/perf_event_attr_fprintf.c b/tools/perf/util/pe= rf_event_attr_fprintf.c index 29e66835da3a..59fbbba79697 100644 --- a/tools/perf/util/perf_event_attr_fprintf.c +++ b/tools/perf/util/perf_event_attr_fprintf.c @@ -222,8 +222,14 @@ static void __p_config_tracepoint_id(char *buf, size_t= size, u64 value) } #endif =20 -static void __p_config_id(char *buf, size_t size, u32 type, u64 value) +static void __p_config_id(struct perf_pmu *pmu, char *buf, size_t size, u3= 2 type, u64 value) { + const char *name =3D perf_pmu__name_from_config(pmu, value); + + if (name) { + print_id_hex(name); + return; + } switch (type) { case PERF_TYPE_HARDWARE: return __p_config_hw_id(buf, size, value); @@ -252,7 +258,7 @@ static void __p_config_id(char *buf, size_t size, u32 t= ype, u64 value) #define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, va= l) #define p_read_format(val) __p_read_format(buf, BUF_SIZE, val) #define p_type_id(val) __p_type_id(pmu, buf, BUF_SIZE, val) -#define p_config_id(val) __p_config_id(buf, BUF_SIZE, attr->type, val) +#define p_config_id(val) __p_config_id(pmu, buf, BUF_SIZE, attr->type, val) =20 #define PRINT_ATTRn(_n, _f, _p, _a) \ do { \ diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index e24bc3b8f696..97ad299f463f 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -2145,3 +2145,21 @@ void perf_pmu__delete(struct perf_pmu *pmu) zfree(&pmu->id); free(pmu); } + +const char *perf_pmu__name_from_config(struct perf_pmu *pmu, u64 config) +{ + struct perf_pmu_alias *event; + + if (!pmu) + return NULL; + + pmu_add_cpu_aliases(pmu); + list_for_each_entry(event, &pmu->aliases, list) { + struct perf_event_attr attr =3D {.config =3D 0,}; + int ret =3D perf_pmu__config(pmu, &attr, &event->terms, NULL); + + if (ret =3D=3D 0 && config =3D=3D attr.config) + return event->name; + } + return NULL; +} diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 9f5284b29ecf..152700f78455 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -276,5 +276,6 @@ struct perf_pmu *perf_pmu__lookup(struct list_head *pmu= s, int dirfd, const char struct perf_pmu *perf_pmu__create_placeholder_core_pmu(struct list_head *c= ore_pmus); void perf_pmu__delete(struct perf_pmu *pmu); struct perf_pmu *perf_pmus__find_core_pmu(void); +const char *perf_pmu__name_from_config(struct perf_pmu *pmu, u64 config); =20 #endif /* __PMU_H */ --=20 2.44.0.278.ge034bb2e1d-goog