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'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 *