linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] KVM: arm64: Force HCR_EL2.xMO to 1 at all times in VHE mode
@ 2025-04-22 12:39 Marc Zyngier
  2025-04-24 22:24 ` D Scott Phillips
  0 siblings, 1 reply; 3+ messages in thread
From: Marc Zyngier @ 2025-04-22 12:39 UTC (permalink / raw)
  To: linux-arm-kernel, kvmarm
  Cc: Joey Gouly, Suzuki K Poulose, Oliver Upton, Zenghui Yu,
	Mark Rutland, D Scott Phillips

We keep setting and clearing these bits depending on the role of
the host kernel, mimicking what we do for nVHE. But that's actually
pretty pointless, as we always want physical interrupts to make it
to the host, at EL2.

This has also two problems:

- it prevents IRQs from being taken when these bits are cleared
  if the implementation has chosen to implement these bits as
  masks when HCR_EL2.{TGE,xMO}=={0,0}

- it triggers a bad erratum on the AmpereOne HW, which catches
  fire on clearing these bits while an interrupt is being taken
  (AC03_CPU_36).

Let's kill these two birds with a single stone.

Reported-by: D Scott Phillips <scott@os.amperecomputing.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 arch/arm64/include/asm/kvm_arm.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index 974d72b5905b8..bba4b0e930915 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -100,7 +100,7 @@
 			 HCR_FMO | HCR_IMO | HCR_PTW | HCR_TID3 | HCR_TID1)
 #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK | HCR_ATA)
 #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC)
-#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
+#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H | HCR_AMO | HCR_IMO | HCR_FMO)
 
 #define HCRX_HOST_FLAGS (HCRX_EL2_MSCEn | HCRX_EL2_TCR2En | HCRX_EL2_EnFPM)
 #define MPAMHCR_HOST_FLAGS	0
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Force HCR_EL2.xMO to 1 at all times in VHE mode
  2025-04-22 12:39 [PATCH] KVM: arm64: Force HCR_EL2.xMO to 1 at all times in VHE mode Marc Zyngier
@ 2025-04-24 22:24 ` D Scott Phillips
  2025-04-26 18:13   ` Marc Zyngier
  0 siblings, 1 reply; 3+ messages in thread
From: D Scott Phillips @ 2025-04-24 22:24 UTC (permalink / raw)
  To: Marc Zyngier, linux-arm-kernel, kvmarm
  Cc: Joey Gouly, Suzuki K Poulose, Oliver Upton, Zenghui Yu,
	Mark Rutland

Marc Zyngier <maz@kernel.org> writes:

> We keep setting and clearing these bits depending on the role of
> the host kernel, mimicking what we do for nVHE. But that's actually
> pretty pointless, as we always want physical interrupts to make it
> to the host, at EL2.
>
> This has also two problems:
>
> - it prevents IRQs from being taken when these bits are cleared
>   if the implementation has chosen to implement these bits as
>   masks when HCR_EL2.{TGE,xMO}=={0,0}
>
> - it triggers a bad erratum on the AmpereOne HW, which catches
>   fire on clearing these bits while an interrupt is being taken
>   (AC03_CPU_36).
>
> Let's kill these two birds with a single stone.
>
> Reported-by: D Scott Phillips <scott@os.amperecomputing.com>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
>  arch/arm64/include/asm/kvm_arm.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
> index 974d72b5905b8..bba4b0e930915 100644
> --- a/arch/arm64/include/asm/kvm_arm.h
> +++ b/arch/arm64/include/asm/kvm_arm.h
> @@ -100,7 +100,7 @@
>  			 HCR_FMO | HCR_IMO | HCR_PTW | HCR_TID3 | HCR_TID1)
>  #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK | HCR_ATA)
>  #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC)
> -#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
> +#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H | HCR_AMO | HCR_IMO | HCR_FMO)
>  
>  #define HCRX_HOST_FLAGS (HCRX_EL2_MSCEn | HCRX_EL2_TCR2En | HCRX_EL2_EnFPM)
>  #define MPAMHCR_HOST_FLAGS	0

Should the xMO twiddling in __vgic_v3_get_gic_config() also get dropped
here?


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] KVM: arm64: Force HCR_EL2.xMO to 1 at all times in VHE mode
  2025-04-24 22:24 ` D Scott Phillips
@ 2025-04-26 18:13   ` Marc Zyngier
  0 siblings, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2025-04-26 18:13 UTC (permalink / raw)
  To: D Scott Phillips
  Cc: linux-arm-kernel, kvmarm, Joey Gouly, Suzuki K Poulose,
	Oliver Upton, Zenghui Yu, Mark Rutland

On Thu, 24 Apr 2025 23:24:59 +0100,
D Scott Phillips <scott@os.amperecomputing.com> wrote:
> 
> Marc Zyngier <maz@kernel.org> writes:
> 
> > We keep setting and clearing these bits depending on the role of
> > the host kernel, mimicking what we do for nVHE. But that's actually
> > pretty pointless, as we always want physical interrupts to make it
> > to the host, at EL2.
> >
> > This has also two problems:
> >
> > - it prevents IRQs from being taken when these bits are cleared
> >   if the implementation has chosen to implement these bits as
> >   masks when HCR_EL2.{TGE,xMO}=={0,0}
> >
> > - it triggers a bad erratum on the AmpereOne HW, which catches
> >   fire on clearing these bits while an interrupt is being taken
> >   (AC03_CPU_36).
> >
> > Let's kill these two birds with a single stone.
> >
> > Reported-by: D Scott Phillips <scott@os.amperecomputing.com>
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
> > ---
> >  arch/arm64/include/asm/kvm_arm.h | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
> > index 974d72b5905b8..bba4b0e930915 100644
> > --- a/arch/arm64/include/asm/kvm_arm.h
> > +++ b/arch/arm64/include/asm/kvm_arm.h
> > @@ -100,7 +100,7 @@
> >  			 HCR_FMO | HCR_IMO | HCR_PTW | HCR_TID3 | HCR_TID1)
> >  #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK | HCR_ATA)
> >  #define HCR_HOST_NVHE_PROTECTED_FLAGS (HCR_HOST_NVHE_FLAGS | HCR_TSC)
> > -#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
> > +#define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H | HCR_AMO | HCR_IMO | HCR_FMO)
> >  
> >  #define HCRX_HOST_FLAGS (HCRX_EL2_MSCEn | HCRX_EL2_TCR2En | HCRX_EL2_EnFPM)
> >  #define MPAMHCR_HOST_FLAGS	0
> 
> Should the xMO twiddling in __vgic_v3_get_gic_config() also get dropped
> here?

Ah, that old chestnut. Yeah, well spotted. It could do with some
TLC. I'll do some surgery on it and post a v2.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-26 18:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-22 12:39 [PATCH] KVM: arm64: Force HCR_EL2.xMO to 1 at all times in VHE mode Marc Zyngier
2025-04-24 22:24 ` D Scott Phillips
2025-04-26 18:13   ` Marc Zyngier

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).