Received: by 2002:a05:6358:f14:b0:e5:3b68:ec04 with SMTP id b20csp335687rwj; Fri, 23 Dec 2022 02:01:54 -0800 (PST) X-Google-Smtp-Source: AMrXdXthC0d3VrpwSo3832U8dw/MFmiu0MweHoOeVhneMbJoTrlTlbA8OZtt5r+HiYlK7XQje9sf X-Received: by 2002:a05:6e02:5cc:b0:30b:adf7:b9bb with SMTP id l12-20020a056e0205cc00b0030badf7b9bbmr6259983ils.2.1671789714662; Fri, 23 Dec 2022 02:01:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671789714; cv=none; d=google.com; s=arc-20160816; b=Gv660cSClyzgqbpw8rEUPClKnegqc/+Mgq+lBYRMpFOhzQ2tU8u5YKt+A3wmxq6vTj di1xlkQMRKYaneHMeKUBJa3BleqQ90gYsQ/4hsFgPmULUY2flOjAQxJcfIuuS6Tg7VIw bJJYLkbFVismW9cgMZKPCeYozdwEt+t7ujdWgY7TwWOobOvDz+7UJ1xu2XbMA/U8EfGd KLwMzPg/UMR+W0/VQdXi1063vHde6dApXZz+2r03PM4q88mxFpdBeUggMXZMsvZ7Bzp+ 7DhcQX4mVZBXfTgZJUJRT3v+sT+znl8yon6rPl/nW770BnC14YkVIn+pnwpSmBYUrvGK m3Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=KTme1RC2DwAv2XimvOMl4fSX9I4qxsVKRwQQ2YNUVto=; b=o+RYvrfT+HhtzOm7250ptra06rlPKeGIGUJWM6pFGkqzw0/6w9RM8tcX43etpjmG7C CxbA8brcEJ8rNK4BY/ds27FwU1x3qu4PxM0gx25ceskqSnhi/Nma8FVE+FwB2oBsQqQ/ OO5p2KJMm89+h0m1MhAMab0drr9Qs+ytsnetu+DjgR16MA1qexBkroGiAa2ARTNrBF9A Sv58qIMVxywe3YVb1cKayLKn00f8bs+JvbTpDZg/caPam2ZDB2cmHJmjAoATw0W3dEa3 6whiSg8th9Lufe31oVp8NsjUuEPBjJm/yIBY+FdWOMQPNTHuhmYkj29Eg869FeQRKRq4 DW8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="RgKktLn/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q197-20020a632ace000000b0047895cb23cdsi3084862pgq.647.2022.12.23.02.01.46; Fri, 23 Dec 2022 02:01:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="RgKktLn/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236204AbiLWJzY (ORCPT + 67 others); Fri, 23 Dec 2022 04:55:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229483AbiLWJyc (ORCPT ); Fri, 23 Dec 2022 04:54:32 -0500 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5085DEBD for ; Fri, 23 Dec 2022 01:54:31 -0800 (PST) Received: by mail-pl1-x631.google.com with SMTP id w20so4504014ply.12 for ; Fri, 23 Dec 2022 01:54:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=KTme1RC2DwAv2XimvOMl4fSX9I4qxsVKRwQQ2YNUVto=; b=RgKktLn/TQT/wQ5bd8DUVSJCfcvr5HTHA1b57i9sLLu7jMidAUbwYq6/+GpApOdnMW bm+3dQ/hak6YKrwyqoQjJelfhhYdfNvZRRUIWUX5KadwYUnN5lw/Ydak5J2KJQwPmpmV 56I/p5jLttghMr72+mLCekUEwK7p3VilGUxBN2u120G+s4JywswENzP6YcdV0l6/PQ63 VN4uBUm6Kh0yAHQ2j97XNXI+qtx+xa9AsvYRAe2HL5aeHFfglSikH0sEyFVOzXfv19IT 5nak68W1XJeKOhZKkXpF+/m0EusC2kTwqdWr+MdfV4o1NnecgOa30AxxLjDHfEYrVxxi bbwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=KTme1RC2DwAv2XimvOMl4fSX9I4qxsVKRwQQ2YNUVto=; b=Tr74tBGyazt4tGZnRjyVTWUJ/KaSn1AsqLDj/KrMfTvVwTCR0QkcpvLKCstx7ktWjV mQchoopUbG8drVMLnNitp7McV4V9Jo9XjMr3C3EuzbkSXLEW0X1ajDxADhaMzYFYTjGE I5Gd0+BbwL7AqYyShJoOobX3nyau1rPhfNtn4B6X8SiKpJ5c+tNC+6NIXHRM7Sv5yQV5 +Ro+InfjDfqqacWqZcij3P4hb1zxwbGs/8ByO0GKiZ0z5Ao96HVre2vxbyaF25faG3oM 37T5B705caQqLPHLnkut8PYT8qE1JX3m3rAzJ6EdpGPO284ucuSUaFQd9m4ES/MEPHon 0DkA== X-Gm-Message-State: AFqh2kp5O4WYlOOkpKFwuByG+GxyyTmwO2b7BVOhVHJphTHSsbMeSm12 KIfbq/2yisooHv4nR47ABMSqMY8mTA938WcYPcVfSA== X-Received: by 2002:a17:90b:485:b0:219:720c:29cb with SMTP id bh5-20020a17090b048500b00219720c29cbmr935268pjb.76.1671789271110; Fri, 23 Dec 2022 01:54:31 -0800 (PST) MIME-Version: 1.0 References: <20221222160328.3639989-1-james.clark@arm.com> <20221222160328.3639989-6-james.clark@arm.com> In-Reply-To: <20221222160328.3639989-6-james.clark@arm.com> From: Mike Leach Date: Fri, 23 Dec 2022 09:54:19 +0000 Message-ID: Subject: Re: [PATCH v2 5/7] perf cs_etm: Keep separate symbols for ETMv4 and ETE parameters To: James Clark Cc: linux-perf-users@vger.kernel.org, tanmay@marvell.com, sgoutham@marvell.com, gcherian@marvell.com, lcherian@marvell.com, bbhushan2@marvell.com, German Gomez , Mathieu Poirier , Suzuki K Poulose , Leo Yan , John Garry , Will Deacon , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 22 Dec 2022 at 16:07, James Clark wrote: > > From: German Gomez > > Previously, adding a new parameter at the end of ETMv4 meant adding it > somewhere in the middle of ETE, which is not supported by the current > header version. > > Signed-off-by: German Gomez > Signed-off-by: James Clark > --- > tools/perf/arch/arm/util/cs-etm.c | 43 ++++++++++++++++++++++++++----- > tools/perf/util/cs-etm-base.c | 32 +++++++++++++++++------ > tools/perf/util/cs-etm.c | 12 ++++----- > tools/perf/util/cs-etm.h | 11 +++++++- > 4 files changed, 76 insertions(+), 22 deletions(-) > > diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c > index a346d5f3dafa..b526ffe550a5 100644 > --- a/tools/perf/arch/arm/util/cs-etm.c > +++ b/tools/perf/arch/arm/util/cs-etm.c > @@ -53,7 +53,15 @@ static const char * const metadata_etmv4_ro[] = { > [CS_ETMV4_TRCIDR2] = "trcidr/trcidr2", > [CS_ETMV4_TRCIDR8] = "trcidr/trcidr8", > [CS_ETMV4_TRCAUTHSTATUS] = "mgmt/trcauthstatus", > - [CS_ETE_TRCDEVARCH] = "mgmt/trcdevarch" > +}; > + > +static const char * const metadata_ete_ro[] = { > + [CS_ETE_TRCIDR0] = "trcidr/trcidr0", > + [CS_ETE_TRCIDR1] = "trcidr/trcidr1", > + [CS_ETE_TRCIDR2] = "trcidr/trcidr2", > + [CS_ETE_TRCIDR8] = "trcidr/trcidr8", > + [CS_ETE_TRCAUTHSTATUS] = "mgmt/trcauthstatus", > + [CS_ETE_TRCDEVARCH] = "mgmt/trcdevarch", > }; > > static bool cs_etm_is_etmv4(struct auxtrace_record *itr, int cpu); > @@ -617,7 +625,7 @@ static bool cs_etm_is_ete(struct auxtrace_record *itr, int cpu) > { > struct cs_etm_recording *ptr = container_of(itr, struct cs_etm_recording, itr); > struct perf_pmu *cs_etm_pmu = ptr->cs_etm_pmu; > - int trcdevarch = cs_etm_get_ro(cs_etm_pmu, cpu, metadata_etmv4_ro[CS_ETE_TRCDEVARCH]); > + int trcdevarch = cs_etm_get_ro(cs_etm_pmu, cpu, metadata_ete_ro[CS_ETE_TRCDEVARCH]); > > /* > * ETE if ARCHVER is 5 (ARCHVER is 4 for ETM) and ARCHPART is 0xA13. > @@ -648,6 +656,31 @@ static void cs_etm_save_etmv4_header(__u64 data[], struct auxtrace_record *itr, > metadata_etmv4_ro[CS_ETMV4_TRCAUTHSTATUS]); > } > > +static void cs_etm_save_ete_header(__u64 data[], struct auxtrace_record *itr, int cpu) > +{ > + struct cs_etm_recording *ptr = container_of(itr, struct cs_etm_recording, itr); > + struct perf_pmu *cs_etm_pmu = ptr->cs_etm_pmu; > + > + /* Get trace configuration register */ > + data[CS_ETE_TRCCONFIGR] = cs_etmv4_get_config(itr); > + /* Get traceID from the framework */ > + data[CS_ETE_TRCTRACEIDR] = coresight_get_trace_id(cpu); > + /* Get read-only information from sysFS */ > + data[CS_ETE_TRCIDR0] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCIDR0]); > + data[CS_ETE_TRCIDR1] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCIDR1]); > + data[CS_ETE_TRCIDR2] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCIDR2]); > + data[CS_ETE_TRCIDR8] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCIDR8]); > + data[CS_ETE_TRCAUTHSTATUS] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCAUTHSTATUS]); > + /* ETE uses the same registers as ETMv4 plus TRCDEVARCH */ > + data[CS_ETE_TRCDEVARCH] = cs_etm_get_ro(cs_etm_pmu, cpu, > + metadata_ete_ro[CS_ETE_TRCDEVARCH]); > +} > + > static void cs_etm_get_metadata(int cpu, u32 *offset, > struct auxtrace_record *itr, > struct perf_record_auxtrace_info *info) > @@ -661,11 +694,7 @@ static void cs_etm_get_metadata(int cpu, u32 *offset, > /* first see what kind of tracer this cpu is affined to */ > if (cs_etm_is_ete(itr, cpu)) { > magic = __perf_cs_ete_magic; > - /* ETE uses the same registers as ETMv4 plus TRCDEVARCH */ > - cs_etm_save_etmv4_header(&info->priv[*offset], itr, cpu); > - info->priv[*offset + CS_ETE_TRCDEVARCH] = > - cs_etm_get_ro(cs_etm_pmu, cpu, > - metadata_etmv4_ro[CS_ETE_TRCDEVARCH]); > + cs_etm_save_ete_header(&info->priv[*offset], itr, cpu); > > /* How much space was used */ > increment = CS_ETE_PRIV_MAX; > diff --git a/tools/perf/util/cs-etm-base.c b/tools/perf/util/cs-etm-base.c > index 597542410854..282042c6e944 100644 > --- a/tools/perf/util/cs-etm-base.c > +++ b/tools/perf/util/cs-etm-base.c > @@ -36,7 +36,20 @@ static const char * const cs_etmv4_priv_fmts[] = { > [CS_ETMV4_TRCIDR2] = " TRCIDR2 %llx\n", > [CS_ETMV4_TRCIDR8] = " TRCIDR8 %llx\n", > [CS_ETMV4_TRCAUTHSTATUS] = " TRCAUTHSTATUS %llx\n", > - [CS_ETE_TRCDEVARCH] = " TRCDEVARCH %llx\n" > +}; > + > +static const char * const cs_ete_priv_fmts[] = { > + [CS_ETM_MAGIC] = " Magic number %llx\n", > + [CS_ETM_CPU] = " CPU %lld\n", > + [CS_ETM_NR_TRC_PARAMS] = " NR_TRC_PARAMS %llx\n", > + [CS_ETE_TRCCONFIGR] = " TRCCONFIGR %llx\n", > + [CS_ETE_TRCTRACEIDR] = " TRCTRACEIDR %llx\n", > + [CS_ETE_TRCIDR0] = " TRCIDR0 %llx\n", > + [CS_ETE_TRCIDR1] = " TRCIDR1 %llx\n", > + [CS_ETE_TRCIDR2] = " TRCIDR2 %llx\n", > + [CS_ETE_TRCIDR8] = " TRCIDR8 %llx\n", > + [CS_ETE_TRCAUTHSTATUS] = " TRCAUTHSTATUS %llx\n", > + [CS_ETE_TRCDEVARCH] = " TRCDEVARCH %llx\n", > }; > > static const char * const param_unk_fmt = > @@ -96,19 +109,22 @@ static int cs_etm__print_cpu_metadata_v1(u64 *val, int *offset) > else > fprintf(stdout, cs_etm_priv_fmts[j], val[i]); > } > - } else if (magic == __perf_cs_etmv4_magic || magic == __perf_cs_ete_magic) { > - /* > - * ETE and ETMv4 can be printed in the same block because the number of parameters > - * is saved and they share the list of parameter names. ETE is also only supported > - * in V1 files. > - */ > + } else if (magic == __perf_cs_etmv4_magic) { > for (j = 0; j < total_params; j++, i++) { > /* if newer record - could be excess params */ > - if (j >= CS_ETE_PRIV_MAX) > + if (j >= CS_ETMV4_PRIV_MAX) > fprintf(stdout, param_unk_fmt, j, val[i]); > else > fprintf(stdout, cs_etmv4_priv_fmts[j], val[i]); > } > + } else if (magic == __perf_cs_ete_magic) { > + for (j = 0; j < total_params; j++, i++) { > + /* if newer record - could be excess params */ > + if (j >= CS_ETE_PRIV_MAX) > + fprintf(stdout, param_unk_fmt, j, val[i]); > + else > + fprintf(stdout, cs_ete_priv_fmts[j], val[i]); > + } > } else { > /* failure - note bad magic value and error out */ > fprintf(stdout, magic_unk_fmt, magic); > diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c > index 33303d03c2fa..879576d5f899 100644 > --- a/tools/perf/util/cs-etm.c > +++ b/tools/perf/util/cs-etm.c > @@ -464,12 +464,12 @@ static void cs_etm__set_trace_param_ete(struct cs_etm_trace_params *t_params, > u64 **metadata = etm->metadata; > > t_params[idx].protocol = CS_ETM_PROTO_ETE; > - t_params[idx].ete.reg_idr0 = metadata[idx][CS_ETMV4_TRCIDR0]; > - t_params[idx].ete.reg_idr1 = metadata[idx][CS_ETMV4_TRCIDR1]; > - t_params[idx].ete.reg_idr2 = metadata[idx][CS_ETMV4_TRCIDR2]; > - t_params[idx].ete.reg_idr8 = metadata[idx][CS_ETMV4_TRCIDR8]; > - t_params[idx].ete.reg_configr = metadata[idx][CS_ETMV4_TRCCONFIGR]; > - t_params[idx].ete.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR]; > + t_params[idx].ete.reg_idr0 = metadata[idx][CS_ETE_TRCIDR0]; > + t_params[idx].ete.reg_idr1 = metadata[idx][CS_ETE_TRCIDR1]; > + t_params[idx].ete.reg_idr2 = metadata[idx][CS_ETE_TRCIDR2]; > + t_params[idx].ete.reg_idr8 = metadata[idx][CS_ETE_TRCIDR8]; > + t_params[idx].ete.reg_configr = metadata[idx][CS_ETE_TRCCONFIGR]; > + t_params[idx].ete.reg_traceidr = metadata[idx][CS_ETE_TRCTRACEIDR]; > t_params[idx].ete.reg_devarch = metadata[idx][CS_ETE_TRCDEVARCH]; > } > > diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h > index 5da50d5dae6b..c5925428afa9 100644 > --- a/tools/perf/util/cs-etm.h > +++ b/tools/perf/util/cs-etm.h > @@ -82,7 +82,16 @@ enum { > * added in header V1 > */ > enum { > - CS_ETE_TRCDEVARCH = CS_ETMV4_PRIV_MAX, > + /* Dynamic, configurable parameters */ > + CS_ETE_TRCCONFIGR = CS_ETM_COMMON_BLK_MAX_V1, > + CS_ETE_TRCTRACEIDR, > + /* RO, taken from sysFS */ > + CS_ETE_TRCIDR0, > + CS_ETE_TRCIDR1, > + CS_ETE_TRCIDR2, > + CS_ETE_TRCIDR8, > + CS_ETE_TRCAUTHSTATUS, > + CS_ETE_TRCDEVARCH, > CS_ETE_PRIV_MAX > }; > > -- > 2.25.1 > Reviewed-by: Mike Leach -- Mike Leach Principal Engineer, ARM Ltd. Manchester Design Centre. UK