From nobody Mon Dec 15 22:02:23 2025 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C6B17205515; Tue, 4 Mar 2025 11:13:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741086794; cv=none; b=j7oOzNiHqmt1HETqW5PFL0Ubcb+Ul1Q68wjV9s+6/V+h5m0+dJkOBwPxbtvA4pzlVNlE7ZX/BZe5+z5g6Cj0XH6zmvUaf3K9dVHNNmo8TxpWYfwD48moV8BN0dV1dwlFOaoK20G6bvBcQUe6waLi9BoVQ6w+XpqEiX638z6nBNk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741086794; c=relaxed/simple; bh=jnuiUq48AE2Cj9DM/fpwvDRM6qTOxoMjsaeMWefoo1Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=ObcXS73YilIjqJD82zmjExeghItWCDTyrzlBEZQF9a+RiYQcQYocmSNwM7Gi5/0glToajEzDRRgt1ti31aF/EtFLkIRpqdkA9VRf/lJ2MT0fkEN7yiV+TLq3xwJVwyQRxxcutoTB4S9Livvghvr2F534vb17HqoGpBcZemPc4lA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 2575F1007; Tue, 4 Mar 2025 03:13:26 -0800 (PST) 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 2A3B33F5A1; Tue, 4 Mar 2025 03:13:10 -0800 (PST) From: Leo Yan To: Arnaldo Carvalho de Melo , Namhyung Kim , Ian Rogers , James Clark , Adrian Hunter , Jiri Olsa , "Liang, Kan" , Mark Rutland , Will Deacon , Mike Leach , Graham Woodward , Paschalis.Mpeis@arm.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Leo Yan Subject: [PATCH v4 09/12] perf arm-spe: Fill branch operations and events to record Date: Tue, 4 Mar 2025 11:12:37 +0000 Message-Id: <20250304111240.3378214-10-leo.yan@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250304111240.3378214-1-leo.yan@arm.com> References: <20250304111240.3378214-1-leo.yan@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The new added branch operations and events are filled into record, the information will be consumed when synthesizing samples. Reviewed-by: Ian Rogers Reviewed-by: James Clark Signed-off-by: Leo Yan --- .../util/arm-spe-decoder/arm-spe-decoder.c | 18 ++++++++++++++++++ .../util/arm-spe-decoder/arm-spe-decoder.h | 10 ++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.c b/tools/perf= /util/arm-spe-decoder/arm-spe-decoder.c index ba807071d3c1..52bd0a4ea96d 100644 --- a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.c +++ b/tools/perf/util/arm-spe-decoder/arm-spe-decoder.c @@ -207,6 +207,18 @@ static int arm_spe_read_record(struct arm_spe_decoder = *decoder) break; case SPE_OP_PKT_HDR_CLASS_BR_ERET: decoder->record.op |=3D ARM_SPE_OP_BRANCH_ERET; + if (payload & SPE_OP_PKT_COND) + decoder->record.op |=3D ARM_SPE_OP_BR_COND; + if (payload & SPE_OP_PKT_INDIRECT_BRANCH) + decoder->record.op |=3D ARM_SPE_OP_BR_INDIRECT; + if (payload & SPE_OP_PKT_GCS) + decoder->record.op |=3D ARM_SPE_OP_BR_GCS; + if (SPE_OP_PKT_CR_BL(payload)) + decoder->record.op |=3D ARM_SPE_OP_BR_CR_BL; + if (SPE_OP_PKT_CR_RET(payload)) + decoder->record.op |=3D ARM_SPE_OP_BR_CR_RET; + if (SPE_OP_PKT_CR_NON_BL_RET(payload)) + decoder->record.op |=3D ARM_SPE_OP_BR_CR_NON_BL_RET; break; default: pr_err("Get packet error!\n"); @@ -238,6 +250,12 @@ static int arm_spe_read_record(struct arm_spe_decoder = *decoder) if (payload & BIT(EV_MISPRED)) decoder->record.type |=3D ARM_SPE_BRANCH_MISS; =20 + if (payload & BIT(EV_NOT_TAKEN)) + decoder->record.type |=3D ARM_SPE_BRANCH_NOT_TAKEN; + + if (payload & BIT(EV_TRANSACTIONAL)) + decoder->record.type |=3D ARM_SPE_IN_TXN; + if (payload & BIT(EV_PARTIAL_PREDICATE)) decoder->record.type |=3D ARM_SPE_SVE_PARTIAL_PRED; =20 diff --git a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h b/tools/perf= /util/arm-spe-decoder/arm-spe-decoder.h index 4bcd627e859f..85b688a97436 100644 --- a/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h +++ b/tools/perf/util/arm-spe-decoder/arm-spe-decoder.h @@ -24,6 +24,8 @@ enum arm_spe_sample_type { ARM_SPE_REMOTE_ACCESS =3D 1 << 7, ARM_SPE_SVE_PARTIAL_PRED =3D 1 << 8, ARM_SPE_SVE_EMPTY_PRED =3D 1 << 9, + ARM_SPE_BRANCH_NOT_TAKEN =3D 1 << 10, + ARM_SPE_IN_TXN =3D 1 << 11, }; =20 enum arm_spe_op_type { @@ -52,8 +54,12 @@ enum arm_spe_op_type { ARM_SPE_OP_SVE_SG =3D 1 << 27, =20 /* Second level operation type for BRANCH_ERET */ - ARM_SPE_OP_BR_COND =3D 1 << 16, - ARM_SPE_OP_BR_INDIRECT =3D 1 << 17, + ARM_SPE_OP_BR_COND =3D 1 << 16, + ARM_SPE_OP_BR_INDIRECT =3D 1 << 17, + ARM_SPE_OP_BR_GCS =3D 1 << 18, + ARM_SPE_OP_BR_CR_BL =3D 1 << 19, + ARM_SPE_OP_BR_CR_RET =3D 1 << 20, + ARM_SPE_OP_BR_CR_NON_BL_RET =3D 1 << 21, }; =20 enum arm_spe_common_data_source { --=20 2.34.1