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

Shaoqin Huang
2023-06-13T09:59:39Z

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@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