[PATCH v3 09/17] KVM: arm64: Key use of VHE instructions in nVHE code off ARM64_KVM_HVHE

Shaoqin Huang shahuang at redhat.com
Tue Jun 13 02:57:21 PDT 2023


Hi Marc,

On 6/10/23 00:21, Marc Zyngier wrote:
> We can now start with the fun stuff: if we enable VHE *only* for
> the hypervisor, we need to generate the VHE instructions when
> accessing the system registers.
> 
> For this, reporpose the alternative sequence to be keyed off
s/reporpose/repropose or s/reporpose/repurpose ?
> ARM64_KVM_HVHE in the nVHE hypervisor code, and only there.
> 
> Signed-off-by: Marc Zyngier <maz at kernel.org>
> ---
>   arch/arm64/include/asm/kvm_hyp.h | 12 +++++++++---
>   1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/kvm_hyp.h b/arch/arm64/include/asm/kvm_hyp.h
> index fea04eb25cb4..b7238c72a04c 100644
> --- a/arch/arm64/include/asm/kvm_hyp.h
> +++ b/arch/arm64/include/asm/kvm_hyp.h
> @@ -33,12 +33,18 @@ DECLARE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params);
>   
>   #else // !__KVM_VHE_HYPERVISOR__
>   
> +#if defined(__KVM_NVHE_HYPERVISOR__)
> +#define VHE_ALT_KEY	ARM64_KVM_HVHE
> +#else
> +#define VHE_ALT_KEY	ARM64_HAS_VIRT_HOST_EXTN
> +#endif
> +
>   #define read_sysreg_elx(r,nvh,vh)					\
>   	({								\
>   		u64 reg;						\
> -		asm volatile(ALTERNATIVE(__mrs_s("%0", r##nvh),	\
> +		asm volatile(ALTERNATIVE(__mrs_s("%0", r##nvh),		\
>   					 __mrs_s("%0", r##vh),		\
> -					 ARM64_HAS_VIRT_HOST_EXTN)	\
> +					 VHE_ALT_KEY)			\
>   			     : "=r" (reg));				\
>   		reg;							\
>   	})
> @@ -48,7 +54,7 @@ DECLARE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params);
>   		u64 __val = (u64)(v);					\
>   		asm volatile(ALTERNATIVE(__msr_s(r##nvh, "%x0"),	\
>   					 __msr_s(r##vh, "%x0"),		\
> -					 ARM64_HAS_VIRT_HOST_EXTN)	\
> +					 VHE_ALT_KEY)			\
>   					 : : "rZ" (__val));		\
>   	} while (0)
>   

-- 
Shaoqin




More information about the linux-arm-kernel mailing list