On 6/8/21 1:45 PM, 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. > > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > --- > 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..6d3f71822976 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, /* For 48bits VA but ANY bits PA */ /* 64 bits VA but 47 bits PA */ Or, looking at the other entries above, just remove it. > 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..d61ad15b1979 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 = 4; > + break; > default: > TEST_FAIL("Unknown guest mode, mode: 0x%x", mode); > } >