On Tue, Jun 08, 2021 at 02:39:54PM +0200, Christian Borntraeger wrote: > s390x can have up to 47bits of physical guest and 64bits of virtual > address bits. Add a new address mode to avoid errors of testcases > going beyond 47bits. Thanks for the fix. My apologies for breaking s390. The patch "KVM: selftests: Fix 32-bit truncation of vm_get_max_gfn()" has already been added to stable so you may want to add the following: Fixes: ef4c9f4f6546 ("KVM: selftests: Fix 32-bit truncation of vm_get_max_gfn()") Cc: stable@xxxxxxxxxxxxxxx > > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> Reviewed-by: David Matlack <dmatlack@xxxxxxxxxx> > --- > v1->v2: > - remove wrong comment > - use 5 levels of page tables > tools/testing/selftests/kvm/include/kvm_util.h | 3 ++- > tools/testing/selftests/kvm/lib/kvm_util.c | 5 +++++ > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h > index fcd8e3855111..b602552b1ed0 100644 > --- a/tools/testing/selftests/kvm/include/kvm_util.h > +++ b/tools/testing/selftests/kvm/include/kvm_util.h > @@ -43,6 +43,7 @@ enum vm_guest_mode { > VM_MODE_P40V48_4K, > VM_MODE_P40V48_64K, > VM_MODE_PXXV48_4K, /* For 48bits VA but ANY bits PA */ > + VM_MODE_P47V64_4K, > NUM_VM_MODES, > }; > > @@ -60,7 +61,7 @@ enum vm_guest_mode { > > #elif defined(__s390x__) > > -#define VM_MODE_DEFAULT VM_MODE_P52V48_4K > +#define VM_MODE_DEFAULT VM_MODE_P47V64_4K > #define MIN_PAGE_SHIFT 12U > #define ptes_per_page(page_size) ((page_size) / 16) > > diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c > index 28e528c19d28..b126fab6c4e1 100644 > --- a/tools/testing/selftests/kvm/lib/kvm_util.c > +++ b/tools/testing/selftests/kvm/lib/kvm_util.c > @@ -175,6 +175,7 @@ const char *vm_guest_mode_string(uint32_t i) > [VM_MODE_P40V48_4K] = "PA-bits:40, VA-bits:48, 4K pages", > [VM_MODE_P40V48_64K] = "PA-bits:40, VA-bits:48, 64K pages", > [VM_MODE_PXXV48_4K] = "PA-bits:ANY, VA-bits:48, 4K pages", > + [VM_MODE_P47V64_4K] = "PA-bits:47, VA-bits:64, 4K pages", > }; > _Static_assert(sizeof(strings)/sizeof(char *) == NUM_VM_MODES, > "Missing new mode strings?"); > @@ -192,6 +193,7 @@ const struct vm_guest_mode_params vm_guest_mode_params[] = { > { 40, 48, 0x1000, 12 }, > { 40, 48, 0x10000, 16 }, > { 0, 0, 0x1000, 12 }, > + { 47, 64, 0x1000, 12 }, > }; > _Static_assert(sizeof(vm_guest_mode_params)/sizeof(struct vm_guest_mode_params) == NUM_VM_MODES, > "Missing new mode params?"); > @@ -277,6 +279,9 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int perm) > TEST_FAIL("VM_MODE_PXXV48_4K not supported on non-x86 platforms"); > #endif > break; > + case VM_MODE_P47V64_4K: > + vm->pgtable_levels = 5; > + break; > default: > TEST_FAIL("Unknown guest mode, mode: 0x%x", mode); > } > -- > 2.31.1 >