selftests: KVM: s390: fix early guest crash
authorChristian Borntraeger <borntraeger@de.ibm.com>
Tue, 10 Mar 2020 13:01:40 +0000 (09:01 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 16 Mar 2020 16:59:07 +0000 (17:59 +0100)
The guest crashes very early due to changes in the control registers
used by dynamic address translation. Let us use different registers
that will not crash the guest.

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/s390x/resets.c

index bf04d77de16b52d4eba50cbd6e1fa019f62707df..83624d0b1453b8678995a0a71ee69f1ea4c7a363 100644 (file)
@@ -23,25 +23,24 @@ struct kvm_run *run;
 struct kvm_sync_regs *regs;
 static uint64_t regs_null[16];
 
-static uint64_t crs[16] = { 0x40000ULL,
-                           0x42000ULL,
-                           0, 0, 0, 0, 0,
-                           0x43000ULL,
-                           0, 0, 0, 0, 0,
-                           0x44000ULL,
-                           0, 0
-};
-
 static void guest_code_initial(void)
 {
-       /* Round toward 0 */
-       uint32_t fpc = 0x11;
+       /* set several CRs to "safe" value */
+       unsigned long cr2_59 = 0x10;    /* enable guarded storage */
+       unsigned long cr8_63 = 0x1;     /* monitor mask = 1 */
+       unsigned long cr10 = 1;         /* PER START */
+       unsigned long cr11 = -1;        /* PER END */
+
 
        /* Dirty registers */
        asm volatile (
-               "       lctlg   0,15,%0\n"
-               "       sfpc    %1\n"
-               : : "Q" (crs), "d" (fpc));
+               "       lghi    2,0x11\n"       /* Round toward 0 */
+               "       sfpc    2\n"            /* set fpc to !=0 */
+               "       lctlg   2,2,%0\n"
+               "       lctlg   8,8,%1\n"
+               "       lctlg   10,10,%2\n"
+               "       lctlg   11,11,%3\n"
+               : : "m" (cr2_59), "m" (cr8_63), "m" (cr10), "m" (cr11) : "2");
        GUEST_SYNC(0);
 }