From patchwork Tue Aug 27 16:44:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Yan X-Patchwork-Id: 13779820 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2689DC5472F for ; Tue, 27 Aug 2024 16:53:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=qEK7xuorip4nYo2rI2Wyrn2ahhbSWOcTcDfQQcLCDAk=; b=XrjUkEWJB49dkXgW6Lp8bAFber bKQnvyEILyyBjcekFAsYzbzBWIQaWbB4uTWRtQNn9PIgEOXrRdOj4cyOTYBR8gBLbNyxw43bzy3c9 Y/NGbSNbIVKTIZXTXa4wJcR7kbu6WxxEFf2nlwaQGhsaGFS1k1T0UMmA4VXM5fsQOEVIMGkHNIIpY rSWeOUilwaVLPKDZZ3ZYPcVkiLA1LydEFE4ntR1WSvGE82zzhM6zrBfuhv6dcIRkAKaniRKmRCOjc x/H4FHRo7xC0DJJz1fzVAVxluG7+ZN0HkvEmL+8IsO8ggfJGAD/d2Ya+n8GpTpXvIJ7dv96dslgyg uv1tGFAg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sizR2-0000000C9Ps-2sIK; Tue, 27 Aug 2024 16:52:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sizJO-0000000C7cq-3Lsk for linux-arm-kernel@lists.infradead.org; Tue, 27 Aug 2024 16:44:56 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A622DDA7; Tue, 27 Aug 2024 09:45:20 -0700 (PDT) Received: from e132581.cambridge.arm.com (e132581.arm.com [10.2.76.71]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 58BC73F762; Tue, 27 Aug 2024 09:44:52 -0700 (PDT) From: Leo Yan To: Arnaldo Carvalho de Melo , Will Deacon , Mark Rutland , Suzuki K Poulose , Mike Leach , James Clark , John Garry , Namhyung Kim , Ian Rogers , Adrian Hunter , "Liang, Kan" , Jonathan Cameron , Yicong Yang , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-perf-users@vger.kernel.org Cc: Leo Yan Subject: [PATCH v1 9/9] perf arm-spe: Dump metadata with version 2 Date: Tue, 27 Aug 2024 17:44:17 +0100 Message-Id: <20240827164417.3309560-10-leo.yan@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240827164417.3309560-1-leo.yan@arm.com> References: <20240827164417.3309560-1-leo.yan@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240827_094454_959176_2747E171 X-CRM114-Status: GOOD ( 14.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org This commit dumps metadata with version 2. It uses two string arrays metadata_hdr_fmts and metadata_per_cpu_fmts as string formats for the header and per CPU data respectively, and the arm_spe_print_info() function is enhanced to support dumping metadata with the version 2 format. After: 0 0 0x4a8 [0x170]: PERF_RECORD_AUXTRACE_INFO type: 4 PMU Type :13 Version :2 Num of CPUs :8 CPU # :0 MIDR :0x410fd801 Bound PMU Type :-1 Min Interval :0 Load Data Source :0 CPU # :1 MIDR :0x410fd801 Bound PMU Type :-1 Min Interval :0 Load Data Source :0 CPU # :2 MIDR :0x410fd870 Bound PMU Type :13 Min Interval :1024 Load Data Source :1 CPU # :3 MIDR :0x410fd870 Bound PMU Type :13 Min Interval :1024 Load Data Source :1 CPU # :4 MIDR :0x410fd870 Bound PMU Type :13 Min Interval :1024 Load Data Source :1 CPU # :5 MIDR :0x410fd870 Bound PMU Type :13 Min Interval :1024 Load Data Source :1 CPU # :6 MIDR :0x410fd850 Bound PMU Type :14 Min Interval :1024 Load Data Source :1 CPU # :7 MIDR :0x410fd850 Bound PMU Type :14 Min Interval :1024 Load Data Source :1 Signed-off-by: Leo Yan --- tools/perf/util/arm-spe.c | 43 ++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index 87cf06db765b..be34d4c4306a 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -1067,16 +1067,49 @@ static bool arm_spe_evsel_is_auxtrace(struct perf_session *session __maybe_unuse return strstarts(evsel->name, ARM_SPE_PMU_NAME); } -static const char * const arm_spe_info_fmts[] = { - [ARM_SPE_PMU_TYPE] = " PMU Type %"PRId64"\n", +static const char * const metadata_hdr_fmts[] = { + [ARM_SPE_PMU_TYPE] = " PMU Type :%"PRId64"\n", + [ARM_SPE_HEADER_VERSION] = " Version :%"PRId64"\n", + [ARM_SPE_CPU_NUM] = " Num of CPUs :%"PRId64"\n", }; -static void arm_spe_print_info(__u64 *arr) +static const char * const metadata_per_cpu_fmts[] = { + [ARM_SPE_CPU] = " CPU # :%"PRId64"\n", + [ARM_SPE_CPU_MIDR] = " MIDR :0x%"PRIx64"\n", + [ARM_SPE_CPU_PMU_TYPE] = " Bound PMU Type :%"PRId64"\n", + [ARM_SPE_CAP_MIN_IVAL] = " Min Interval :%"PRId64"\n", + [ARM_SPE_CAP_LDS] = " Load Data Source :%"PRId64"\n", +}; + +static void arm_spe_print_info(struct arm_spe *spe, __u64 *arr) { + unsigned int i, cpu, header_size, cpu_num, per_cpu_size; + if (!dump_trace) return; - fprintf(stdout, arm_spe_info_fmts[ARM_SPE_PMU_TYPE], arr[ARM_SPE_PMU_TYPE]); + if (spe->metadata_ver == 1) { + cpu_num = 0; + header_size = ARM_SPE_AUXTRACE_V1_PRIV_MAX; + per_cpu_size = 0; + } else if (spe->metadata_ver == 2) { + cpu_num = arr[ARM_SPE_CPU_NUM]; + header_size = ARM_SPE_AUXTRACE_V2_PRIV_MAX; + per_cpu_size = ARM_SPE_AUXTRACE_V2_PRIV_PER_CPU_MAX; + } else { + pr_err("Cannot support metadata ver: %ld\n", spe->metadata_ver); + return; + } + + for (i = 0; i < header_size; i++) + fprintf(stdout, metadata_hdr_fmts[i], arr[i]); + + arr += header_size; + for (cpu = 0; cpu < cpu_num; cpu++) { + for (i = 0; i < per_cpu_size; i++) + fprintf(stdout, metadata_per_cpu_fmts[i], arr[i]); + arr += per_cpu_size; + } } static void arm_spe_set_event_name(struct evlist *evlist, u64 id, @@ -1383,7 +1416,7 @@ int arm_spe_process_auxtrace_info(union perf_event *event, spe->auxtrace.evsel_is_auxtrace = arm_spe_evsel_is_auxtrace; session->auxtrace = &spe->auxtrace; - arm_spe_print_info(&auxtrace_info->priv[0]); + arm_spe_print_info(spe, &auxtrace_info->priv[0]); if (dump_trace) return 0;