From: Joey Gouly <joey.gouly@arm.com>
To: Marc Zyngier <maz@kernel.org>
Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Zenghui Yu <yuzenghui@huawei.com>,
Mark Rutland <mark.rutland@arm.com>,
Fuad Tabba <tabba@google.com>, Will Deacon <will@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>
Subject: Re: [PATCH v3 04/42] arm64: sysreg: Replace HGFxTR_EL2 with HFG{R,W}TR_EL2
Date: Tue, 29 Apr 2025 15:26:56 +0100 [thread overview]
Message-ID: <20250429142656.GD1859293@e124191.cambridge.arm.com> (raw)
In-Reply-To: <20250426122836.3341523-5-maz@kernel.org>
On Sat, Apr 26, 2025 at 01:27:58PM +0100, Marc Zyngier wrote:
> Treating HFGRTR_EL2 and HFGWTR_EL2 identically was a mistake.
> It makes things hard to reason about, has the potential to
> introduce bugs by giving a meaning to bits that are really reserved,
> and is in general a bad description of the architecture.
>
> Given that #defines are cheap, let's describe both registers as
> intended by the architecture, and repaint all the existing uses.
>
> Yes, this is painful.
>
> The registers themselves are generated from the JSON file in
> an automated way.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
> arch/arm64/include/asm/el2_setup.h | 14 +-
> arch/arm64/include/asm/kvm_arm.h | 4 +-
> arch/arm64/include/asm/kvm_host.h | 3 +-
> arch/arm64/kvm/emulate-nested.c | 154 +++++++++----------
> arch/arm64/kvm/hyp/include/hyp/switch.h | 4 +-
> arch/arm64/kvm/hyp/vgic-v3-sr.c | 8 +-
> arch/arm64/kvm/nested.c | 42 ++---
> arch/arm64/kvm/sys_regs.c | 20 +--
> arch/arm64/tools/sysreg | 194 +++++++++++++++---------
> 9 files changed, 250 insertions(+), 193 deletions(-)
>
> diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
> index ebceaae3c749b..055e69a4184ce 100644
> --- a/arch/arm64/include/asm/el2_setup.h
> +++ b/arch/arm64/include/asm/el2_setup.h
> @@ -213,8 +213,8 @@
> cbz x1, .Lskip_debug_fgt_\@
>
> /* Disable nVHE traps of TPIDR2 and SMPRI */
> - orr x0, x0, #HFGxTR_EL2_nSMPRI_EL1_MASK
> - orr x0, x0, #HFGxTR_EL2_nTPIDR2_EL0_MASK
> + orr x0, x0, #HFGRTR_EL2_nSMPRI_EL1_MASK
> + orr x0, x0, #HFGRTR_EL2_nTPIDR2_EL0_MASK
>
> .Lskip_debug_fgt_\@:
> mrs_s x1, SYS_ID_AA64MMFR3_EL1
> @@ -222,8 +222,8 @@
> cbz x1, .Lskip_pie_fgt_\@
>
> /* Disable trapping of PIR_EL1 / PIRE0_EL1 */
> - orr x0, x0, #HFGxTR_EL2_nPIR_EL1
> - orr x0, x0, #HFGxTR_EL2_nPIRE0_EL1
> + orr x0, x0, #HFGRTR_EL2_nPIR_EL1
> + orr x0, x0, #HFGRTR_EL2_nPIRE0_EL1
>
> .Lskip_pie_fgt_\@:
> mrs_s x1, SYS_ID_AA64MMFR3_EL1
> @@ -231,7 +231,7 @@
> cbz x1, .Lskip_poe_fgt_\@
>
> /* Disable trapping of POR_EL0 */
> - orr x0, x0, #HFGxTR_EL2_nPOR_EL0
> + orr x0, x0, #HFGRTR_EL2_nPOR_EL0
>
> .Lskip_poe_fgt_\@:
> /* GCS depends on PIE so we don't check it if PIE is absent */
> @@ -240,8 +240,8 @@
> cbz x1, .Lset_fgt_\@
>
> /* Disable traps of access to GCS registers at EL0 and EL1 */
> - orr x0, x0, #HFGxTR_EL2_nGCS_EL1_MASK
> - orr x0, x0, #HFGxTR_EL2_nGCS_EL0_MASK
> + orr x0, x0, #HFGRTR_EL2_nGCS_EL1_MASK
> + orr x0, x0, #HFGRTR_EL2_nGCS_EL0_MASK
>
> .Lset_fgt_\@:
> msr_s SYS_HFGRTR_EL2, x0
We still treat them as the same here, funny that the diff cut off the next line:
msr_s SYS_HFGWTR_EL2, x0
Not saying you should do anything about it, I think it's fine.
> diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
> index f36d067967c33..43a630b940bfb 100644
> --- a/arch/arm64/include/asm/kvm_arm.h
> +++ b/arch/arm64/include/asm/kvm_arm.h
> @@ -325,7 +325,7 @@
> * Once we get to a point where the two describe the same thing, we'll
> * merge the definitions. One day.
> */
> -#define __HFGRTR_EL2_RES0 HFGxTR_EL2_RES0
> +#define __HFGRTR_EL2_RES0 HFGRTR_EL2_RES0
> #define __HFGRTR_EL2_MASK GENMASK(49, 0)
> #define __HFGRTR_EL2_nMASK ~(__HFGRTR_EL2_RES0 | __HFGRTR_EL2_MASK)
>
> @@ -336,7 +336,7 @@
> #define __HFGRTR_ONLY_MASK (BIT(46) | BIT(42) | BIT(40) | BIT(28) | \
> GENMASK(26, 25) | BIT(21) | BIT(18) | \
> GENMASK(15, 14) | GENMASK(10, 9) | BIT(2))
> -#define __HFGWTR_EL2_RES0 (__HFGRTR_EL2_RES0 | __HFGRTR_ONLY_MASK)
> +#define __HFGWTR_EL2_RES0 HFGWTR_EL2_RES0
> #define __HFGWTR_EL2_MASK (__HFGRTR_EL2_MASK & ~__HFGRTR_ONLY_MASK)
> #define __HFGWTR_EL2_nMASK ~(__HFGWTR_EL2_RES0 | __HFGWTR_EL2_MASK)
>
> diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> index e98cfe7855a62..7a1ef5be7efb2 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -273,7 +273,8 @@ struct kvm_sysreg_masks;
>
> enum fgt_group_id {
> __NO_FGT_GROUP__,
> - HFGxTR_GROUP,
> + HFGRTR_GROUP,
> + HFGWTR_GROUP = HFGRTR_GROUP,
I think this change makes most of the diffs using this enum more confusing, but
it also seems to algin the code more closely with HDFGWTR_EL2 and HDFGWTR_EL2.
> HDFGRTR_GROUP,
> HDFGWTR_GROUP = HDFGRTR_GROUP,
> HFGITR_GROUP,
> diff --git a/arch/arm64/kvm/emulate-nested.c b/arch/arm64/kvm/emulate-nested.c
> index 0fcfcc0478f94..efe1eb3f1bd07 100644
> --- a/arch/arm64/kvm/emulate-nested.c
> +++ b/arch/arm64/kvm/emulate-nested.c
> @@ -1296,81 +1296,81 @@ enum fg_filter_id {
>
> static const struct encoding_to_trap_config encoding_to_fgt[] __initconst = {
> /* HFGRTR_EL2, HFGWTR_EL2 */
> - SR_FGT(SYS_AMAIR2_EL1, HFGxTR, nAMAIR2_EL1, 0),
> - SR_FGT(SYS_MAIR2_EL1, HFGxTR, nMAIR2_EL1, 0),
> - SR_FGT(SYS_S2POR_EL1, HFGxTR, nS2POR_EL1, 0),
> - SR_FGT(SYS_POR_EL1, HFGxTR, nPOR_EL1, 0),
> - SR_FGT(SYS_POR_EL0, HFGxTR, nPOR_EL0, 0),
> - SR_FGT(SYS_PIR_EL1, HFGxTR, nPIR_EL1, 0),
> - SR_FGT(SYS_PIRE0_EL1, HFGxTR, nPIRE0_EL1, 0),
> - SR_FGT(SYS_RCWMASK_EL1, HFGxTR, nRCWMASK_EL1, 0),
> - SR_FGT(SYS_TPIDR2_EL0, HFGxTR, nTPIDR2_EL0, 0),
> - SR_FGT(SYS_SMPRI_EL1, HFGxTR, nSMPRI_EL1, 0),
> - SR_FGT(SYS_GCSCR_EL1, HFGxTR, nGCS_EL1, 0),
> - SR_FGT(SYS_GCSPR_EL1, HFGxTR, nGCS_EL1, 0),
> - SR_FGT(SYS_GCSCRE0_EL1, HFGxTR, nGCS_EL0, 0),
> - SR_FGT(SYS_GCSPR_EL0, HFGxTR, nGCS_EL0, 0),
> - SR_FGT(SYS_ACCDATA_EL1, HFGxTR, nACCDATA_EL1, 0),
> - SR_FGT(SYS_ERXADDR_EL1, HFGxTR, ERXADDR_EL1, 1),
> - SR_FGT(SYS_ERXPFGCDN_EL1, HFGxTR, ERXPFGCDN_EL1, 1),
> - SR_FGT(SYS_ERXPFGCTL_EL1, HFGxTR, ERXPFGCTL_EL1, 1),
> - SR_FGT(SYS_ERXPFGF_EL1, HFGxTR, ERXPFGF_EL1, 1),
> - SR_FGT(SYS_ERXMISC0_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC1_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC2_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXMISC3_EL1, HFGxTR, ERXMISCn_EL1, 1),
> - SR_FGT(SYS_ERXSTATUS_EL1, HFGxTR, ERXSTATUS_EL1, 1),
> - SR_FGT(SYS_ERXCTLR_EL1, HFGxTR, ERXCTLR_EL1, 1),
> - SR_FGT(SYS_ERXFR_EL1, HFGxTR, ERXFR_EL1, 1),
> - SR_FGT(SYS_ERRSELR_EL1, HFGxTR, ERRSELR_EL1, 1),
> - SR_FGT(SYS_ERRIDR_EL1, HFGxTR, ERRIDR_EL1, 1),
> - SR_FGT(SYS_ICC_IGRPEN0_EL1, HFGxTR, ICC_IGRPENn_EL1, 1),
> - SR_FGT(SYS_ICC_IGRPEN1_EL1, HFGxTR, ICC_IGRPENn_EL1, 1),
> - SR_FGT(SYS_VBAR_EL1, HFGxTR, VBAR_EL1, 1),
> - SR_FGT(SYS_TTBR1_EL1, HFGxTR, TTBR1_EL1, 1),
> - SR_FGT(SYS_TTBR0_EL1, HFGxTR, TTBR0_EL1, 1),
> - SR_FGT(SYS_TPIDR_EL0, HFGxTR, TPIDR_EL0, 1),
> - SR_FGT(SYS_TPIDRRO_EL0, HFGxTR, TPIDRRO_EL0, 1),
> - SR_FGT(SYS_TPIDR_EL1, HFGxTR, TPIDR_EL1, 1),
> - SR_FGT(SYS_TCR_EL1, HFGxTR, TCR_EL1, 1),
> - SR_FGT(SYS_TCR2_EL1, HFGxTR, TCR_EL1, 1),
> - SR_FGT(SYS_SCXTNUM_EL0, HFGxTR, SCXTNUM_EL0, 1),
> - SR_FGT(SYS_SCXTNUM_EL1, HFGxTR, SCXTNUM_EL1, 1),
> - SR_FGT(SYS_SCTLR_EL1, HFGxTR, SCTLR_EL1, 1),
> - SR_FGT(SYS_REVIDR_EL1, HFGxTR, REVIDR_EL1, 1),
> - SR_FGT(SYS_PAR_EL1, HFGxTR, PAR_EL1, 1),
> - SR_FGT(SYS_MPIDR_EL1, HFGxTR, MPIDR_EL1, 1),
> - SR_FGT(SYS_MIDR_EL1, HFGxTR, MIDR_EL1, 1),
> - SR_FGT(SYS_MAIR_EL1, HFGxTR, MAIR_EL1, 1),
> - SR_FGT(SYS_LORSA_EL1, HFGxTR, LORSA_EL1, 1),
> - SR_FGT(SYS_LORN_EL1, HFGxTR, LORN_EL1, 1),
> - SR_FGT(SYS_LORID_EL1, HFGxTR, LORID_EL1, 1),
> - SR_FGT(SYS_LOREA_EL1, HFGxTR, LOREA_EL1, 1),
> - SR_FGT(SYS_LORC_EL1, HFGxTR, LORC_EL1, 1),
> - SR_FGT(SYS_ISR_EL1, HFGxTR, ISR_EL1, 1),
> - SR_FGT(SYS_FAR_EL1, HFGxTR, FAR_EL1, 1),
> - SR_FGT(SYS_ESR_EL1, HFGxTR, ESR_EL1, 1),
> - SR_FGT(SYS_DCZID_EL0, HFGxTR, DCZID_EL0, 1),
> - SR_FGT(SYS_CTR_EL0, HFGxTR, CTR_EL0, 1),
> - SR_FGT(SYS_CSSELR_EL1, HFGxTR, CSSELR_EL1, 1),
> - SR_FGT(SYS_CPACR_EL1, HFGxTR, CPACR_EL1, 1),
> - SR_FGT(SYS_CONTEXTIDR_EL1, HFGxTR, CONTEXTIDR_EL1, 1),
> - SR_FGT(SYS_CLIDR_EL1, HFGxTR, CLIDR_EL1, 1),
> - SR_FGT(SYS_CCSIDR_EL1, HFGxTR, CCSIDR_EL1, 1),
> - SR_FGT(SYS_APIBKEYLO_EL1, HFGxTR, APIBKey, 1),
> - SR_FGT(SYS_APIBKEYHI_EL1, HFGxTR, APIBKey, 1),
> - SR_FGT(SYS_APIAKEYLO_EL1, HFGxTR, APIAKey, 1),
> - SR_FGT(SYS_APIAKEYHI_EL1, HFGxTR, APIAKey, 1),
> - SR_FGT(SYS_APGAKEYLO_EL1, HFGxTR, APGAKey, 1),
> - SR_FGT(SYS_APGAKEYHI_EL1, HFGxTR, APGAKey, 1),
> - SR_FGT(SYS_APDBKEYLO_EL1, HFGxTR, APDBKey, 1),
> - SR_FGT(SYS_APDBKEYHI_EL1, HFGxTR, APDBKey, 1),
> - SR_FGT(SYS_APDAKEYLO_EL1, HFGxTR, APDAKey, 1),
> - SR_FGT(SYS_APDAKEYHI_EL1, HFGxTR, APDAKey, 1),
> - SR_FGT(SYS_AMAIR_EL1, HFGxTR, AMAIR_EL1, 1),
> - SR_FGT(SYS_AIDR_EL1, HFGxTR, AIDR_EL1, 1),
> - SR_FGT(SYS_AFSR1_EL1, HFGxTR, AFSR1_EL1, 1),
> - SR_FGT(SYS_AFSR0_EL1, HFGxTR, AFSR0_EL1, 1),
> + SR_FGT(SYS_AMAIR2_EL1, HFGRTR, nAMAIR2_EL1, 0),
> + SR_FGT(SYS_MAIR2_EL1, HFGRTR, nMAIR2_EL1, 0),
> + SR_FGT(SYS_S2POR_EL1, HFGRTR, nS2POR_EL1, 0),
> + SR_FGT(SYS_POR_EL1, HFGRTR, nPOR_EL1, 0),
> + SR_FGT(SYS_POR_EL0, HFGRTR, nPOR_EL0, 0),
> + SR_FGT(SYS_PIR_EL1, HFGRTR, nPIR_EL1, 0),
> + SR_FGT(SYS_PIRE0_EL1, HFGRTR, nPIRE0_EL1, 0),
> + SR_FGT(SYS_RCWMASK_EL1, HFGRTR, nRCWMASK_EL1, 0),
> + SR_FGT(SYS_TPIDR2_EL0, HFGRTR, nTPIDR2_EL0, 0),
> + SR_FGT(SYS_SMPRI_EL1, HFGRTR, nSMPRI_EL1, 0),
> + SR_FGT(SYS_GCSCR_EL1, HFGRTR, nGCS_EL1, 0),
> + SR_FGT(SYS_GCSPR_EL1, HFGRTR, nGCS_EL1, 0),
> + SR_FGT(SYS_GCSCRE0_EL1, HFGRTR, nGCS_EL0, 0),
> + SR_FGT(SYS_GCSPR_EL0, HFGRTR, nGCS_EL0, 0),
> + SR_FGT(SYS_ACCDATA_EL1, HFGRTR, nACCDATA_EL1, 0),
> + SR_FGT(SYS_ERXADDR_EL1, HFGRTR, ERXADDR_EL1, 1),
> + SR_FGT(SYS_ERXPFGCDN_EL1, HFGRTR, ERXPFGCDN_EL1, 1),
> + SR_FGT(SYS_ERXPFGCTL_EL1, HFGRTR, ERXPFGCTL_EL1, 1),
> + SR_FGT(SYS_ERXPFGF_EL1, HFGRTR, ERXPFGF_EL1, 1),
> + SR_FGT(SYS_ERXMISC0_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC1_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC2_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXMISC3_EL1, HFGRTR, ERXMISCn_EL1, 1),
> + SR_FGT(SYS_ERXSTATUS_EL1, HFGRTR, ERXSTATUS_EL1, 1),
> + SR_FGT(SYS_ERXCTLR_EL1, HFGRTR, ERXCTLR_EL1, 1),
> + SR_FGT(SYS_ERXFR_EL1, HFGRTR, ERXFR_EL1, 1),
> + SR_FGT(SYS_ERRSELR_EL1, HFGRTR, ERRSELR_EL1, 1),
> + SR_FGT(SYS_ERRIDR_EL1, HFGRTR, ERRIDR_EL1, 1),
> + SR_FGT(SYS_ICC_IGRPEN0_EL1, HFGRTR, ICC_IGRPENn_EL1, 1),
> + SR_FGT(SYS_ICC_IGRPEN1_EL1, HFGRTR, ICC_IGRPENn_EL1, 1),
> + SR_FGT(SYS_VBAR_EL1, HFGRTR, VBAR_EL1, 1),
> + SR_FGT(SYS_TTBR1_EL1, HFGRTR, TTBR1_EL1, 1),
> + SR_FGT(SYS_TTBR0_EL1, HFGRTR, TTBR0_EL1, 1),
> + SR_FGT(SYS_TPIDR_EL0, HFGRTR, TPIDR_EL0, 1),
> + SR_FGT(SYS_TPIDRRO_EL0, HFGRTR, TPIDRRO_EL0, 1),
> + SR_FGT(SYS_TPIDR_EL1, HFGRTR, TPIDR_EL1, 1),
> + SR_FGT(SYS_TCR_EL1, HFGRTR, TCR_EL1, 1),
> + SR_FGT(SYS_TCR2_EL1, HFGRTR, TCR_EL1, 1),
> + SR_FGT(SYS_SCXTNUM_EL0, HFGRTR, SCXTNUM_EL0, 1),
> + SR_FGT(SYS_SCXTNUM_EL1, HFGRTR, SCXTNUM_EL1, 1),
> + SR_FGT(SYS_SCTLR_EL1, HFGRTR, SCTLR_EL1, 1),
> + SR_FGT(SYS_REVIDR_EL1, HFGRTR, REVIDR_EL1, 1),
> + SR_FGT(SYS_PAR_EL1, HFGRTR, PAR_EL1, 1),
> + SR_FGT(SYS_MPIDR_EL1, HFGRTR, MPIDR_EL1, 1),
> + SR_FGT(SYS_MIDR_EL1, HFGRTR, MIDR_EL1, 1),
> + SR_FGT(SYS_MAIR_EL1, HFGRTR, MAIR_EL1, 1),
> + SR_FGT(SYS_LORSA_EL1, HFGRTR, LORSA_EL1, 1),
> + SR_FGT(SYS_LORN_EL1, HFGRTR, LORN_EL1, 1),
> + SR_FGT(SYS_LORID_EL1, HFGRTR, LORID_EL1, 1),
> + SR_FGT(SYS_LOREA_EL1, HFGRTR, LOREA_EL1, 1),
> + SR_FGT(SYS_LORC_EL1, HFGRTR, LORC_EL1, 1),
> + SR_FGT(SYS_ISR_EL1, HFGRTR, ISR_EL1, 1),
> + SR_FGT(SYS_FAR_EL1, HFGRTR, FAR_EL1, 1),
> + SR_FGT(SYS_ESR_EL1, HFGRTR, ESR_EL1, 1),
> + SR_FGT(SYS_DCZID_EL0, HFGRTR, DCZID_EL0, 1),
> + SR_FGT(SYS_CTR_EL0, HFGRTR, CTR_EL0, 1),
> + SR_FGT(SYS_CSSELR_EL1, HFGRTR, CSSELR_EL1, 1),
> + SR_FGT(SYS_CPACR_EL1, HFGRTR, CPACR_EL1, 1),
> + SR_FGT(SYS_CONTEXTIDR_EL1, HFGRTR, CONTEXTIDR_EL1, 1),
> + SR_FGT(SYS_CLIDR_EL1, HFGRTR, CLIDR_EL1, 1),
> + SR_FGT(SYS_CCSIDR_EL1, HFGRTR, CCSIDR_EL1, 1),
> + SR_FGT(SYS_APIBKEYLO_EL1, HFGRTR, APIBKey, 1),
> + SR_FGT(SYS_APIBKEYHI_EL1, HFGRTR, APIBKey, 1),
> + SR_FGT(SYS_APIAKEYLO_EL1, HFGRTR, APIAKey, 1),
> + SR_FGT(SYS_APIAKEYHI_EL1, HFGRTR, APIAKey, 1),
> + SR_FGT(SYS_APGAKEYLO_EL1, HFGRTR, APGAKey, 1),
> + SR_FGT(SYS_APGAKEYHI_EL1, HFGRTR, APGAKey, 1),
> + SR_FGT(SYS_APDBKEYLO_EL1, HFGRTR, APDBKey, 1),
> + SR_FGT(SYS_APDBKEYHI_EL1, HFGRTR, APDBKey, 1),
> + SR_FGT(SYS_APDAKEYLO_EL1, HFGRTR, APDAKey, 1),
> + SR_FGT(SYS_APDAKEYHI_EL1, HFGRTR, APDAKey, 1),
> + SR_FGT(SYS_AMAIR_EL1, HFGRTR, AMAIR_EL1, 1),
> + SR_FGT(SYS_AIDR_EL1, HFGRTR, AIDR_EL1, 1),
> + SR_FGT(SYS_AFSR1_EL1, HFGRTR, AFSR1_EL1, 1),
> + SR_FGT(SYS_AFSR0_EL1, HFGRTR, AFSR0_EL1, 1),
> /* HFGITR_EL2 */
> SR_FGT(OP_AT_S1E1A, HFGITR, ATS1E1A, 1),
> SR_FGT(OP_COSP_RCTX, HFGITR, COSPRCTX, 1),
> @@ -2243,7 +2243,7 @@ static bool check_fgt_bit(struct kvm_vcpu *vcpu, bool is_read,
> return false;
>
> switch ((enum fgt_group_id)tc.fgt) {
> - case HFGxTR_GROUP:
> + case HFGRTR_GROUP:
> sr = is_read ? HFGRTR_EL2 : HFGWTR_EL2;
> break;
>
> @@ -2319,7 +2319,7 @@ bool triage_sysreg_trap(struct kvm_vcpu *vcpu, int *sr_index)
> case __NO_FGT_GROUP__:
> break;
>
> - case HFGxTR_GROUP:
> + case HFGRTR_GROUP:
> if (is_read)
> val = __vcpu_sys_reg(vcpu, HFGRTR_EL2);
> else
> diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h
> index b741ea6aefa58..3150e42d79341 100644
> --- a/arch/arm64/kvm/hyp/include/hyp/switch.h
> +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
> @@ -79,7 +79,7 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
> switch(reg) { \
> case HFGRTR_EL2: \
> case HFGWTR_EL2: \
> - id = HFGxTR_GROUP; \
> + id = HFGRTR_GROUP; \
> break; \
> case HFGITR_EL2: \
> id = HFGITR_GROUP; \
> @@ -166,7 +166,7 @@ static inline void __activate_traps_hfgxtr(struct kvm_vcpu *vcpu)
> update_fgt_traps(hctxt, vcpu, kvm, HFGRTR_EL2);
> update_fgt_traps_cs(hctxt, vcpu, kvm, HFGWTR_EL2, 0,
> cpus_have_final_cap(ARM64_WORKAROUND_AMPERE_AC03_CPU_38) ?
> - HFGxTR_EL2_TCR_EL1_MASK : 0);
> + HFGWTR_EL2_TCR_EL1_MASK : 0);
> update_fgt_traps(hctxt, vcpu, kvm, HFGITR_EL2);
> update_fgt_traps(hctxt, vcpu, kvm, HDFGRTR_EL2);
> update_fgt_traps(hctxt, vcpu, kvm, HDFGWTR_EL2);
> diff --git a/arch/arm64/kvm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c
> index ed363aa3027e5..f38565e28a23a 100644
> --- a/arch/arm64/kvm/hyp/vgic-v3-sr.c
> +++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c
> @@ -1052,11 +1052,11 @@ static bool __vgic_v3_check_trap_forwarding(struct kvm_vcpu *vcpu,
> switch (sysreg) {
> case SYS_ICC_IGRPEN0_EL1:
> if (is_read &&
> - (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGRTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> if (!is_read &&
> - (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGWTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> fallthrough;
> @@ -1073,11 +1073,11 @@ static bool __vgic_v3_check_trap_forwarding(struct kvm_vcpu *vcpu,
>
> case SYS_ICC_IGRPEN1_EL1:
> if (is_read &&
> - (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGRTR_EL2) & HFGRTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> if (!is_read &&
> - (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGxTR_EL2_ICC_IGRPENn_EL1))
> + (__vcpu_sys_reg(vcpu, HFGWTR_EL2) & HFGWTR_EL2_ICC_IGRPENn_EL1))
> return true;
>
> fallthrough;
> diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
> index 4a3fc11f7ecf3..16f6129c70b59 100644
> --- a/arch/arm64/kvm/nested.c
> +++ b/arch/arm64/kvm/nested.c
> @@ -1103,40 +1103,40 @@ int kvm_init_nv_sysregs(struct kvm_vcpu *vcpu)
> res0 = res1 = 0;
> if (!(kvm_vcpu_has_feature(kvm, KVM_ARM_VCPU_PTRAUTH_ADDRESS) &&
> kvm_vcpu_has_feature(kvm, KVM_ARM_VCPU_PTRAUTH_GENERIC)))
> - res0 |= (HFGxTR_EL2_APDAKey | HFGxTR_EL2_APDBKey |
> - HFGxTR_EL2_APGAKey | HFGxTR_EL2_APIAKey |
> - HFGxTR_EL2_APIBKey);
> + res0 |= (HFGRTR_EL2_APDAKey | HFGRTR_EL2_APDBKey |
> + HFGRTR_EL2_APGAKey | HFGRTR_EL2_APIAKey |
> + HFGRTR_EL2_APIBKey);
> if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, LO, IMP))
> - res0 |= (HFGxTR_EL2_LORC_EL1 | HFGxTR_EL2_LOREA_EL1 |
> - HFGxTR_EL2_LORID_EL1 | HFGxTR_EL2_LORN_EL1 |
> - HFGxTR_EL2_LORSA_EL1);
> + res0 |= (HFGRTR_EL2_LORC_EL1 | HFGRTR_EL2_LOREA_EL1 |
> + HFGRTR_EL2_LORID_EL1 | HFGRTR_EL2_LORN_EL1 |
> + HFGRTR_EL2_LORSA_EL1);
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, CSV2, CSV2_2) &&
> !kvm_has_feat(kvm, ID_AA64PFR1_EL1, CSV2_frac, CSV2_1p2))
> - res0 |= (HFGxTR_EL2_SCXTNUM_EL1 | HFGxTR_EL2_SCXTNUM_EL0);
> + res0 |= (HFGRTR_EL2_SCXTNUM_EL1 | HFGRTR_EL2_SCXTNUM_EL0);
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, GIC, IMP))
> - res0 |= HFGxTR_EL2_ICC_IGRPENn_EL1;
> + res0 |= HFGRTR_EL2_ICC_IGRPENn_EL1;
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, RAS, IMP))
> - res0 |= (HFGxTR_EL2_ERRIDR_EL1 | HFGxTR_EL2_ERRSELR_EL1 |
> - HFGxTR_EL2_ERXFR_EL1 | HFGxTR_EL2_ERXCTLR_EL1 |
> - HFGxTR_EL2_ERXSTATUS_EL1 | HFGxTR_EL2_ERXMISCn_EL1 |
> - HFGxTR_EL2_ERXPFGF_EL1 | HFGxTR_EL2_ERXPFGCTL_EL1 |
> - HFGxTR_EL2_ERXPFGCDN_EL1 | HFGxTR_EL2_ERXADDR_EL1);
> + res0 |= (HFGRTR_EL2_ERRIDR_EL1 | HFGRTR_EL2_ERRSELR_EL1 |
> + HFGRTR_EL2_ERXFR_EL1 | HFGRTR_EL2_ERXCTLR_EL1 |
> + HFGRTR_EL2_ERXSTATUS_EL1 | HFGRTR_EL2_ERXMISCn_EL1 |
> + HFGRTR_EL2_ERXPFGF_EL1 | HFGRTR_EL2_ERXPFGCTL_EL1 |
> + HFGRTR_EL2_ERXPFGCDN_EL1 | HFGRTR_EL2_ERXADDR_EL1);
> if (!kvm_has_feat(kvm, ID_AA64ISAR1_EL1, LS64, LS64_ACCDATA))
> - res0 |= HFGxTR_EL2_nACCDATA_EL1;
> + res0 |= HFGRTR_EL2_nACCDATA_EL1;
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, GCS, IMP))
> - res0 |= (HFGxTR_EL2_nGCS_EL0 | HFGxTR_EL2_nGCS_EL1);
> + res0 |= (HFGRTR_EL2_nGCS_EL0 | HFGRTR_EL2_nGCS_EL1);
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, SME, IMP))
> - res0 |= (HFGxTR_EL2_nSMPRI_EL1 | HFGxTR_EL2_nTPIDR2_EL0);
> + res0 |= (HFGRTR_EL2_nSMPRI_EL1 | HFGRTR_EL2_nTPIDR2_EL0);
> if (!kvm_has_feat(kvm, ID_AA64PFR1_EL1, THE, IMP))
> - res0 |= HFGxTR_EL2_nRCWMASK_EL1;
> + res0 |= HFGRTR_EL2_nRCWMASK_EL1;
> if (!kvm_has_s1pie(kvm))
> - res0 |= (HFGxTR_EL2_nPIRE0_EL1 | HFGxTR_EL2_nPIR_EL1);
> + res0 |= (HFGRTR_EL2_nPIRE0_EL1 | HFGRTR_EL2_nPIR_EL1);
> if (!kvm_has_s1poe(kvm))
> - res0 |= (HFGxTR_EL2_nPOR_EL0 | HFGxTR_EL2_nPOR_EL1);
> + res0 |= (HFGRTR_EL2_nPOR_EL0 | HFGRTR_EL2_nPOR_EL1);
> if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, S2POE, IMP))
> - res0 |= HFGxTR_EL2_nS2POR_EL1;
> + res0 |= HFGRTR_EL2_nS2POR_EL1;
> if (!kvm_has_feat(kvm, ID_AA64MMFR3_EL1, AIE, IMP))
> - res0 |= (HFGxTR_EL2_nMAIR2_EL1 | HFGxTR_EL2_nAMAIR2_EL1);
> + res0 |= (HFGRTR_EL2_nMAIR2_EL1 | HFGRTR_EL2_nAMAIR2_EL1);
> set_sysreg_masks(kvm, HFGRTR_EL2, res0 | __HFGRTR_EL2_RES0, res1);
> set_sysreg_masks(kvm, HFGWTR_EL2, res0 | __HFGWTR_EL2_RES0, res1);
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 005ad28f73068..6e01b06bedcae 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -5147,12 +5147,12 @@ void kvm_calculate_traps(struct kvm_vcpu *vcpu)
> if (test_bit(KVM_ARCH_FLAG_FGU_INITIALIZED, &kvm->arch.flags))
> goto out;
>
> - kvm->arch.fgu[HFGxTR_GROUP] = (HFGxTR_EL2_nAMAIR2_EL1 |
> - HFGxTR_EL2_nMAIR2_EL1 |
> - HFGxTR_EL2_nS2POR_EL1 |
> - HFGxTR_EL2_nACCDATA_EL1 |
> - HFGxTR_EL2_nSMPRI_EL1_MASK |
> - HFGxTR_EL2_nTPIDR2_EL0_MASK);
> + kvm->arch.fgu[HFGRTR_GROUP] = (HFGRTR_EL2_nAMAIR2_EL1 |
> + HFGRTR_EL2_nMAIR2_EL1 |
> + HFGRTR_EL2_nS2POR_EL1 |
> + HFGRTR_EL2_nACCDATA_EL1 |
> + HFGRTR_EL2_nSMPRI_EL1_MASK |
> + HFGRTR_EL2_nTPIDR2_EL0_MASK);
For example here you see HFGRTR_GROUP but it actually also applies to HFGWTR_GROUP.
>
> if (!kvm_has_feat(kvm, ID_AA64ISAR0_EL1, TLB, OS))
> kvm->arch.fgu[HFGITR_GROUP] |= (HFGITR_EL2_TLBIRVAALE1OS|
> @@ -5188,12 +5188,12 @@ void kvm_calculate_traps(struct kvm_vcpu *vcpu)
> HFGITR_EL2_ATS1E1WP);
>
> if (!kvm_has_s1pie(kvm))
> - kvm->arch.fgu[HFGxTR_GROUP] |= (HFGxTR_EL2_nPIRE0_EL1 |
> - HFGxTR_EL2_nPIR_EL1);
> + kvm->arch.fgu[HFGRTR_GROUP] |= (HFGRTR_EL2_nPIRE0_EL1 |
> + HFGRTR_EL2_nPIR_EL1);
>
> if (!kvm_has_s1poe(kvm))
> - kvm->arch.fgu[HFGxTR_GROUP] |= (HFGxTR_EL2_nPOR_EL1 |
> - HFGxTR_EL2_nPOR_EL0);
> + kvm->arch.fgu[HFGRTR_GROUP] |= (HFGRTR_EL2_nPOR_EL1 |
> + HFGRTR_EL2_nPOR_EL0);
>
> if (!kvm_has_feat(kvm, ID_AA64PFR0_EL1, AMU, IMP))
> kvm->arch.fgu[HAFGRTR_GROUP] |= ~(HAFGRTR_EL2_RES0 |
> diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg
> index 7f39c8f7f036d..e21e881314a33 100644
> --- a/arch/arm64/tools/sysreg
> +++ b/arch/arm64/tools/sysreg
> @@ -2464,73 +2464,6 @@ UnsignedEnum 2:0 F8S1
> EndEnum
> EndSysreg
>
> -SysregFields HFGxTR_EL2
> -Field 63 nAMAIR2_EL1
> -Field 62 nMAIR2_EL1
> -Field 61 nS2POR_EL1
> -Field 60 nPOR_EL1
> -Field 59 nPOR_EL0
> -Field 58 nPIR_EL1
> -Field 57 nPIRE0_EL1
> -Field 56 nRCWMASK_EL1
> -Field 55 nTPIDR2_EL0
> -Field 54 nSMPRI_EL1
> -Field 53 nGCS_EL1
> -Field 52 nGCS_EL0
> -Res0 51
> -Field 50 nACCDATA_EL1
> -Field 49 ERXADDR_EL1
> -Field 48 ERXPFGCDN_EL1
> -Field 47 ERXPFGCTL_EL1
> -Field 46 ERXPFGF_EL1
> -Field 45 ERXMISCn_EL1
> -Field 44 ERXSTATUS_EL1
> -Field 43 ERXCTLR_EL1
> -Field 42 ERXFR_EL1
> -Field 41 ERRSELR_EL1
> -Field 40 ERRIDR_EL1
> -Field 39 ICC_IGRPENn_EL1
> -Field 38 VBAR_EL1
> -Field 37 TTBR1_EL1
> -Field 36 TTBR0_EL1
> -Field 35 TPIDR_EL0
> -Field 34 TPIDRRO_EL0
> -Field 33 TPIDR_EL1
> -Field 32 TCR_EL1
> -Field 31 SCXTNUM_EL0
> -Field 30 SCXTNUM_EL1
> -Field 29 SCTLR_EL1
> -Field 28 REVIDR_EL1
> -Field 27 PAR_EL1
> -Field 26 MPIDR_EL1
> -Field 25 MIDR_EL1
> -Field 24 MAIR_EL1
> -Field 23 LORSA_EL1
> -Field 22 LORN_EL1
> -Field 21 LORID_EL1
> -Field 20 LOREA_EL1
> -Field 19 LORC_EL1
> -Field 18 ISR_EL1
> -Field 17 FAR_EL1
> -Field 16 ESR_EL1
> -Field 15 DCZID_EL0
> -Field 14 CTR_EL0
> -Field 13 CSSELR_EL1
> -Field 12 CPACR_EL1
> -Field 11 CONTEXTIDR_EL1
> -Field 10 CLIDR_EL1
> -Field 9 CCSIDR_EL1
> -Field 8 APIBKey
> -Field 7 APIAKey
> -Field 6 APGAKey
> -Field 5 APDBKey
> -Field 4 APDAKey
> -Field 3 AMAIR_EL1
> -Field 2 AIDR_EL1
> -Field 1 AFSR1_EL1
> -Field 0 AFSR0_EL1
> -EndSysregFields
> -
> Sysreg HCR_EL2 3 4 1 1 0
> Field 63:60 TWEDEL
> Field 59 TWEDEn
> @@ -2635,11 +2568,134 @@ Field 4:0 HPMN
> EndSysreg
>
> Sysreg HFGRTR_EL2 3 4 1 1 4
> -Fields HFGxTR_EL2
> +Field 63 nAMAIR2_EL1
> +Field 62 nMAIR2_EL1
> +Field 61 nS2POR_EL1
> +Field 60 nPOR_EL1
> +Field 59 nPOR_EL0
> +Field 58 nPIR_EL1
> +Field 57 nPIRE0_EL1
> +Field 56 nRCWMASK_EL1
> +Field 55 nTPIDR2_EL0
> +Field 54 nSMPRI_EL1
> +Field 53 nGCS_EL1
> +Field 52 nGCS_EL0
> +Res0 51
> +Field 50 nACCDATA_EL1
> +Field 49 ERXADDR_EL1
> +Field 48 ERXPFGCDN_EL1
> +Field 47 ERXPFGCTL_EL1
> +Field 46 ERXPFGF_EL1
> +Field 45 ERXMISCn_EL1
> +Field 44 ERXSTATUS_EL1
> +Field 43 ERXCTLR_EL1
> +Field 42 ERXFR_EL1
> +Field 41 ERRSELR_EL1
> +Field 40 ERRIDR_EL1
> +Field 39 ICC_IGRPENn_EL1
> +Field 38 VBAR_EL1
> +Field 37 TTBR1_EL1
> +Field 36 TTBR0_EL1
> +Field 35 TPIDR_EL0
> +Field 34 TPIDRRO_EL0
> +Field 33 TPIDR_EL1
> +Field 32 TCR_EL1
> +Field 31 SCXTNUM_EL0
> +Field 30 SCXTNUM_EL1
> +Field 29 SCTLR_EL1
> +Field 28 REVIDR_EL1
> +Field 27 PAR_EL1
> +Field 26 MPIDR_EL1
> +Field 25 MIDR_EL1
> +Field 24 MAIR_EL1
> +Field 23 LORSA_EL1
> +Field 22 LORN_EL1
> +Field 21 LORID_EL1
> +Field 20 LOREA_EL1
> +Field 19 LORC_EL1
> +Field 18 ISR_EL1
> +Field 17 FAR_EL1
> +Field 16 ESR_EL1
> +Field 15 DCZID_EL0
> +Field 14 CTR_EL0
> +Field 13 CSSELR_EL1
> +Field 12 CPACR_EL1
> +Field 11 CONTEXTIDR_EL1
> +Field 10 CLIDR_EL1
> +Field 9 CCSIDR_EL1
> +Field 8 APIBKey
> +Field 7 APIAKey
> +Field 6 APGAKey
> +Field 5 APDBKey
> +Field 4 APDAKey
> +Field 3 AMAIR_EL1
> +Field 2 AIDR_EL1
> +Field 1 AFSR1_EL1
> +Field 0 AFSR0_EL1
> EndSysreg
>
> Sysreg HFGWTR_EL2 3 4 1 1 5
> -Fields HFGxTR_EL2
> +Field 63 nAMAIR2_EL1
> +Field 62 nMAIR2_EL1
> +Field 61 nS2POR_EL1
> +Field 60 nPOR_EL1
> +Field 59 nPOR_EL0
> +Field 58 nPIR_EL1
> +Field 57 nPIRE0_EL1
> +Field 56 nRCWMASK_EL1
> +Field 55 nTPIDR2_EL0
> +Field 54 nSMPRI_EL1
> +Field 53 nGCS_EL1
> +Field 52 nGCS_EL0
> +Res0 51
> +Field 50 nACCDATA_EL1
> +Field 49 ERXADDR_EL1
> +Field 48 ERXPFGCDN_EL1
> +Field 47 ERXPFGCTL_EL1
> +Res0 46
> +Field 45 ERXMISCn_EL1
> +Field 44 ERXSTATUS_EL1
> +Field 43 ERXCTLR_EL1
> +Res0 42
> +Field 41 ERRSELR_EL1
> +Res0 40
> +Field 39 ICC_IGRPENn_EL1
> +Field 38 VBAR_EL1
> +Field 37 TTBR1_EL1
> +Field 36 TTBR0_EL1
> +Field 35 TPIDR_EL0
> +Field 34 TPIDRRO_EL0
> +Field 33 TPIDR_EL1
> +Field 32 TCR_EL1
> +Field 31 SCXTNUM_EL0
> +Field 30 SCXTNUM_EL1
> +Field 29 SCTLR_EL1
> +Res0 28
> +Field 27 PAR_EL1
> +Res0 26:25
> +Field 24 MAIR_EL1
> +Field 23 LORSA_EL1
> +Field 22 LORN_EL1
> +Res0 21
> +Field 20 LOREA_EL1
> +Field 19 LORC_EL1
> +Res0 18
> +Field 17 FAR_EL1
> +Field 16 ESR_EL1
> +Res0 15:14
> +Field 13 CSSELR_EL1
> +Field 12 CPACR_EL1
> +Field 11 CONTEXTIDR_EL1
> +Res0 10:9
> +Field 8 APIBKey
> +Field 7 APIAKey
> +Field 6 APGAKey
> +Field 5 APDBKey
> +Field 4 APDAKey
> +Field 3 AMAIR_EL1
> +Res0 2
> +Field 1 AFSR1_EL1
> +Field 0 AFSR0_EL1
> EndSysreg
>
> Sysreg HFGITR_EL2 3 4 1 1 6
> --
> 2.39.2
>
next prev parent reply other threads:[~2025-04-29 14:27 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-26 12:27 [PATCH v3 00/42] KVM: arm64: Revamp Fine Grained Trap handling Marc Zyngier
2025-04-26 12:27 ` [PATCH v3 01/42] arm64: sysreg: Add ID_AA64ISAR1_EL1.LS64 encoding for FEAT_LS64WB Marc Zyngier
2025-04-29 13:34 ` Joey Gouly
2025-04-26 12:27 ` [PATCH v3 02/42] arm64: sysreg: Update ID_AA64MMFR4_EL1 description Marc Zyngier
2025-04-29 13:38 ` Joey Gouly
2025-04-26 12:27 ` [PATCH v3 03/42] arm64: sysreg: Add layout for HCR_EL2 Marc Zyngier
2025-04-29 14:02 ` Joey Gouly
2025-04-26 12:27 ` [PATCH v3 04/42] arm64: sysreg: Replace HGFxTR_EL2 with HFG{R,W}TR_EL2 Marc Zyngier
2025-04-29 13:07 ` Ben Horgan
2025-04-29 14:26 ` Joey Gouly [this message]
2025-05-01 13:20 ` Marc Zyngier
2025-04-26 12:27 ` [PATCH v3 05/42] arm64: sysreg: Update ID_AA64PFR0_EL1 description Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 06/42] arm64: sysreg: Update PMSIDR_EL1 description Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 07/42] arm64: sysreg: Update TRBIDR_EL1 description Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 08/42] arm64: sysreg: Add registers trapped by HFG{R,W}TR2_EL2 Marc Zyngier
2025-05-01 10:11 ` Joey Gouly
2025-05-01 13:46 ` Marc Zyngier
2025-05-01 13:52 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 09/42] arm64: sysreg: Add registers trapped by HDFG{R,W}TR2_EL2 Marc Zyngier
2025-04-29 13:07 ` Ben Horgan
2025-04-29 14:10 ` Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 10/42] arm64: sysreg: Add system instructions trapped by HFGIRT2_EL2 Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 11/42] arm64: Remove duplicated sysreg encodings Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 12/42] arm64: tools: Resync sysreg.h Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 13/42] arm64: Add syndrome information for trapped LD64B/ST64B{,V,V0} Marc Zyngier
2025-05-01 10:17 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 14/42] arm64: Add FEAT_FGT2 capability Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 15/42] KVM: arm64: Tighten handling of unknown FGT groups Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 16/42] KVM: arm64: Simplify handling of negative FGT bits Marc Zyngier
2025-05-01 10:43 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 17/42] KVM: arm64: Handle trapping of FEAT_LS64* instructions Marc Zyngier
2025-04-29 13:08 ` Ben Horgan
2025-05-01 11:01 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 18/42] KVM: arm64: Restrict ACCDATA_EL1 undef to FEAT_ST64_ACCDATA being disabled Marc Zyngier
2025-04-29 13:08 ` Ben Horgan
2025-04-26 12:28 ` [PATCH v3 19/42] KVM: arm64: Don't treat HCRX_EL2 as a FGT register Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 20/42] KVM: arm64: Plug FEAT_GCS handling Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 21/42] KVM: arm64: Compute FGT masks from KVM's own FGT tables Marc Zyngier
2025-05-01 11:32 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 22/42] KVM: arm64: Add description of FGT bits leading to EC!=0x18 Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 23/42] KVM: arm64: Use computed masks as sanitisers for FGT registers Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 24/42] KVM: arm64: Unconditionally configure fine-grain traps Marc Zyngier
2025-04-29 13:08 ` Ben Horgan
2025-04-29 13:49 ` Marc Zyngier
2025-04-29 14:09 ` Ben Horgan
2025-04-26 12:28 ` [PATCH v3 25/42] KVM: arm64: Propagate FGT masks to the nVHE hypervisor Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 26/42] KVM: arm64: Use computed FGT masks to setup FGT registers Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 27/42] KVM: arm64: Remove hand-crafted masks for " Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 28/42] KVM: arm64: Use KVM-specific HCRX_EL2 RES0 mask Marc Zyngier
2025-05-01 13:33 ` Joey Gouly
2025-04-26 12:28 ` [PATCH v3 29/42] KVM: arm64: Handle PSB CSYNC traps Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 30/42] KVM: arm64: Switch to table-driven FGU configuration Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 31/42] KVM: arm64: Validate FGT register descriptions against RES0 masks Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 32/42] KVM: arm64: Use FGT feature maps to drive RES0 bits Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 33/42] KVM: arm64: Allow kvm_has_feat() to take variable arguments Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 34/42] KVM: arm64: Use HCRX_EL2 feature map to drive fixed-value bits Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 35/42] KVM: arm64: Use HCR_EL2 " Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 36/42] KVM: arm64: Add FEAT_FGT2 registers to the VNCR page Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 37/42] KVM: arm64: Add sanitisation for FEAT_FGT2 registers Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 38/42] KVM: arm64: Add trap routing " Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 39/42] KVM: arm64: Add context-switch " Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 40/42] KVM: arm64: Allow sysreg ranges for FGT descriptors Marc Zyngier
2025-04-29 13:08 ` Ben Horgan
2025-04-26 12:28 ` [PATCH v3 41/42] KVM: arm64: Add FGT descriptors for FEAT_FGT2 Marc Zyngier
2025-04-29 13:09 ` Ben Horgan
2025-04-29 14:30 ` Marc Zyngier
2025-04-26 12:28 ` [PATCH v3 42/42] KVM: arm64: Handle TSB CSYNC traps Marc Zyngier
2025-04-28 18:33 ` [PATCH v3 00/42] KVM: arm64: Revamp Fine Grained Trap handling Ganapatrao Kulkarni
2025-04-28 21:42 ` Marc Zyngier
2025-04-29 7:34 ` Marc Zyngier
2025-04-29 14:30 ` Ganapatrao Kulkarni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250429142656.GD1859293@e124191.cambridge.arm.com \
--to=joey.gouly@arm.com \
--cc=catalin.marinas@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).