[PATCH v2 13/17] kvm: arm/arm64: Allow tuning the physical address size for VM

Suzuki K Poulose Suzuki.Poulose at arm.com
Wed Apr 25 09:22:33 PDT 2018


On 25/04/18 17:10, Julien Grall wrote:
> Hi Suzuki,
> 
> On 27/03/18 14:15, Suzuki K Poulose wrote:
>> Allow specifying the physical address size for a new VM via
>> the kvm_type argument for KVM_CREATE_VM ioctl. This allows
>> us to finalise the stage2 page table format as early as possible
>> and hence perform the right checks on the memory slots without
>> complication. The size is encoded as Log2(PA_Siz) in the bits[7:0]
> 
> s/PA_Siz/PA_Size/.
> 

>> --- a/include/uapi/linux/kvm.h
>> +++ b/include/uapi/linux/kvm.h
>> @@ -740,6 +740,16 @@ struct kvm_ppc_resize_hpt {
>>   #define KVM_S390_SIE_PAGE_OFFSET 1
>>   /*
>> + * On arm/arm64, machine type can be used to request the physical
>> + * address size for the VM. Bits [7-0] have been reserved for the
>> + * PA size shift (i.e, log2(PA-Size)). For backward compatibility,
> 
> I would s/PA-Size/PA_Size/ to avoid the impression that it is a substraction.
> 

Agree.

>> + * value 0 implies the default IPA size, which is 40bits.
>> + */
>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK    0xff
>> +#define KVM_VM_TYPE_ARM_PHYS_SHIFT(x)        \
>> +    ((x) & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK)
>> +
>> +/*
>>    * ioctls for /dev/kvm fds:
>>    */
>>   #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
>> diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
>> index 53bb05c..13eb66f 100644
>> --- a/virt/kvm/arm/arm.c
>> +++ b/virt/kvm/arm/arm.c
>> @@ -110,6 +110,25 @@ void kvm_arch_check_processor_compat(void *rtn)
>>   }
>> +static int kvm_arch_config_vm(struct kvm *kvm, unsigned long type)
>> +{
>> +    u32 ipa_shift = (u32)type & KVM_VM_TYPE_ARM_PHYS_SHIFT_MASK;
> 
> How about using KVM_VM_TYPE_ARM_PHYS_SHIFT(type) directly here?

Thanks for that, I have this already fixed in for v3.

>>   /**
>>    * kvm_arch_init_vm - initializes a VM data structure
>>    * @kvm:    pointer to the KVM struct
>> @@ -118,8 +137,9 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
>>   {
>>       int ret, cpu;
>> -    if (type)
>> -        return -EINVAL;
>> +    ret = kvm_arch_config_vm(kvm, type);
>> +    if (ret)
>> +        return ret;
>>       kvm->arch.last_vcpu_ran = alloc_percpu(typeof(*kvm->arch.last_vcpu_ran));
>>       if (!kvm->arch.last_vcpu_ran)
>>
> 
> Cheers,

Thanks for the review.

Cheers.



More information about the linux-arm-kernel mailing list