[PATCH] KVM: arm: reserve bit in KVM_REG_ARM encoding for secure/nonsecure

Marc Zyngier marc.zyngier at arm.com
Tue Mar 6 08:43:25 PST 2018


Hi Peter,

A couple of comments:

On 06/03/18 16:26, Peter Maydell wrote:
> We have a KVM_REG_ARM encoding that we use to expose KVM guest registers
> to userspace. Define that bit 28 in this encoding indicates secure vs
> nonsecure, so we can distinguish the secure and nonsecure banked versions
> of a banked AArch32 register.
> 
> For KVM currently, all guest registers are nonsecure, but defining
> the bit is useful for userspace. In particular, QEMU uses this
> encoding as part of its on-the-wire migration format, and needs to be
> able to describe secure-bank registers when it is migrating (fully
> emulated) EL3-enabled CPUs.
> 
> Signed-off-by: Peter Maydell <peter.maydell at linaro.org>
> ---
>  arch/arm/include/uapi/asm/kvm.h | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h
> index 6edd177bb1c7..e0d742c36cb1 100644
> --- a/arch/arm/include/uapi/asm/kvm.h
> +++ b/arch/arm/include/uapi/asm/kvm.h
> @@ -135,6 +135,11 @@ struct kvm_arch_memory_slot {
>  #define KVM_REG_ARM_CRM_SHIFT		7
>  #define KVM_REG_ARM_32_CRN_MASK		0x0000000000007800
>  #define KVM_REG_ARM_32_CRN_SHIFT	11
> +/* For KVM currently all guest registers are nonsecure, but we reserve a bit
> + * in the encoding to distinguish secure from nonsecure for banked registers.
> + */

Nit:

/*
 * This is the canonical comment style.
 */

It might be worth pointing out in the comment that this only applies to
AArch32 system registers that are banked by security.

> +#define KVM_REG_ARM_SECURE_MASK	0x0000000010000000
> +#define KVM_REG_ARM_SECURE_SHIFT	28
>  
>  #define ARM_CP15_REG_SHIFT_MASK(x,n) \
>  	(((x) << KVM_REG_ARM_ ## n ## _SHIFT) & KVM_REG_ARM_ ## n ## _MASK)
> 

Don't you also need to define it on the arm64 side?

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...



More information about the linux-arm-kernel mailing list