Re: kvm/queue demand paging test and s390

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 10.03.20 18:27, Andrew Jones wrote:
> On Tue, Mar 10, 2020 at 05:54:59PM +0100, Christian Borntraeger wrote:
>> For s390 the guest memory size must be 1M aligned. I need something like the following to make this work:
>>
>> diff --git a/tools/testing/selftests/kvm/demand_paging_test.c b/tools/testing/selftests/kvm/demand_paging_test.c
>> index c1e326d3ed7f..f85ec3f01a35 100644
>> --- a/tools/testing/selftests/kvm/demand_paging_test.c
>> +++ b/tools/testing/selftests/kvm/demand_paging_test.c
>> @@ -164,6 +164,10 @@ static struct kvm_vm *create_vm(enum vm_guest_mode mode, int vcpus,
>>         pages += ((2 * vcpus * vcpu_memory_bytes) >> PAGE_SHIFT_4K) /
>>                  PTES_PER_4K_PT;
>>         pages = vm_adjust_num_guest_pages(mode, pages);
>> +#ifdef __s390x__
>> +       /* s390 requires 1M aligned guest sizes */
>> +       pages = (pages + 255) & ~0xff;
>> +#endif
>>  
>>         pr_info("Testing guest mode: %s\n", vm_guest_mode_string(mode));
>>  
>>
>> any better idea how to do that?
>>
> 
> For this one we could patch[*] vm_adjust_num_guest_pages(). That would
> also allow the one on line 382, and another one at dirty_log_test.c:300
> to be hidden.

I tried that first but then I ran into several other asserts that checked for
num_pages = vm_adjust_num_guest_pages(num_pages)

See kvm_util.c:     TEST_ASSERT(vm_adjust_num_guest_pages(vm->mode, npages) == npages

So it seems like a bigger rework is necessary to avoid this little hack :-/

> 
> I'd also like to add a
> 
>  unsigned int vm_calc_num_guest_pages(enum vm_guest_mode mode, size_t size)
>  {
>       unsigned int n;
>       n = DIV_ROUND_UP(size, vm_guest_mode_params[mode].page_size);
>       return vm_adjust_num_guest_pages(mode, n);
>  }
> 
> to the num-pages API we've recently put in kvm/queue. If we do, then we
> could add a #ifdef-390x to that as well.
> 
> Thanks,
> drew
> 
> 
> [*]
> 
> diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
> index fc84da4b72d4..9569b21eed26 100644
> --- a/tools/testing/selftests/kvm/include/kvm_util.h
> +++ b/tools/testing/selftests/kvm/include/kvm_util.h
> @@ -261,7 +261,13 @@ unsigned int vm_num_guest_pages(enum vm_guest_mode mode, unsigned int num_host_p
>  static inline unsigned int
>  vm_adjust_num_guest_pages(enum vm_guest_mode mode, unsigned int num_guest_pages)
>  {
> -       return vm_num_guest_pages(mode, vm_num_host_pages(mode, num_guest_pages));
> +       unsigned int n;
> +       n = vm_num_guest_pages(mode, vm_num_host_pages(mode, num_guest_pages));
> +#ifdef __s390x__
> +       /* s390 requires 1M aligned guest sizes */
> +       n = (n + 255) & ~0xff;
> +#endif
> +       return n;
>  }
>  
>  struct kvm_userspace_memory_region *
> 




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux