Re: [PATCH/RFC] KVM: selftests: introduce P44V64 for z196 and EC12

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

 



On 06.07.21 09:40, Christian Borntraeger wrote:
Paolo,

since you have not yet pulled my queue for 5.14. Shall I add the two selftest patches and send a new
pull request?

Hmm, I cant put it on top of the next queue since I would need to rebase.
So lets do the original pull request and I will do another one
on top of kvm/master for the 2 selftest patches.

On 01.07.21 17:38, Christian Borntraeger wrote:
Older machines likes z196 and zEC12 do only support 44 bits of physical
addresses. Make this the default and check via IBC if we are on a later
machine. We then add P47V64 as an additional model.

Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
Fixes: 1bc603af73dd ("KVM: selftests: introduce P47V64 for s390x")
---
  tools/testing/selftests/kvm/include/kvm_util.h |  3 ++-
  tools/testing/selftests/kvm/lib/guest_modes.c  | 16 ++++++++++++++++
  tools/testing/selftests/kvm/lib/kvm_util.c     |  5 +++++
  3 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/kvm/include/kvm_util.h b/tools/testing/selftests/kvm/include/kvm_util.h
index 35739567189e..74d73532fce9 100644
--- a/tools/testing/selftests/kvm/include/kvm_util.h
+++ b/tools/testing/selftests/kvm/include/kvm_util.h
@@ -44,6 +44,7 @@ enum vm_guest_mode {
      VM_MODE_P40V48_64K,
      VM_MODE_PXXV48_4K,    /* For 48bits VA but ANY bits PA */
      VM_MODE_P47V64_4K,
+    VM_MODE_P44V64_4K,
      NUM_VM_MODES,
  };
@@ -61,7 +62,7 @@ enum vm_guest_mode {
  #elif defined(__s390x__)
-#define VM_MODE_DEFAULT            VM_MODE_P47V64_4K
+#define VM_MODE_DEFAULT            VM_MODE_P44V64_4K
  #define MIN_PAGE_SHIFT            12U
  #define ptes_per_page(page_size)    ((page_size) / 16)
diff --git a/tools/testing/selftests/kvm/lib/guest_modes.c b/tools/testing/selftests/kvm/lib/guest_modes.c
index 25bff307c71f..c330f414ef96 100644
--- a/tools/testing/selftests/kvm/lib/guest_modes.c
+++ b/tools/testing/selftests/kvm/lib/guest_modes.c
@@ -22,6 +22,22 @@ void guest_modes_append_default(void)
          }
      }
  #endif
+#ifdef __s390x__
+    {
+        int kvm_fd, vm_fd;
+        struct kvm_s390_vm_cpu_processor info;
+
+        kvm_fd = open_kvm_dev_path_or_exit();
+        vm_fd = ioctl(kvm_fd, KVM_CREATE_VM, 0);
+        kvm_device_access(vm_fd, KVM_S390_VM_CPU_MODEL,
+                  KVM_S390_VM_CPU_PROCESSOR, &info, false);
+        close(vm_fd);
+        close(kvm_fd);
+        /* Starting with z13 we have 47bits of physical address */
+        if (info.ibc >= 0x30)
+            guest_mode_append(VM_MODE_P47V64_4K, true, true);
+    }
+#endif
  }
  void for_each_guest_mode(void (*func)(enum vm_guest_mode, void *), void *arg)
diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
index a2b732cf96ea..8606000c439e 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ -176,6 +176,7 @@ const char *vm_guest_mode_string(uint32_t i)
          [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",
+        [VM_MODE_P44V64_4K]    = "PA-bits:44,  VA-bits:64,  4K pages",
      };
      _Static_assert(sizeof(strings)/sizeof(char *) == NUM_VM_MODES,
                 "Missing new mode strings?");
@@ -194,6 +195,7 @@ const struct vm_guest_mode_params vm_guest_mode_params[] = {
      { 40, 48, 0x10000, 16 },
      {  0,  0,  0x1000, 12 },
      { 47, 64,  0x1000, 12 },
+    { 44, 64,  0x1000, 12 },
  };
  _Static_assert(sizeof(vm_guest_mode_params)/sizeof(struct vm_guest_mode_params) == NUM_VM_MODES,
             "Missing new mode params?");
@@ -282,6 +284,9 @@ struct kvm_vm *vm_create(enum vm_guest_mode mode, uint64_t phy_pages, int perm)
      case VM_MODE_P47V64_4K:
          vm->pgtable_levels = 5;
          break;
+    case VM_MODE_P44V64_4K:
+        vm->pgtable_levels = 5;
+        break;
      default:
          TEST_FAIL("Unknown guest mode, mode: 0x%x", mode);
      }




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux