summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/kvm/s390x
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2020-03-10 09:01:40 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2020-03-16 17:59:07 +0100
commit41cbed5b07b5f6ca4ae567059ae7f0ffad1fd454 (patch)
treeb10f595d22948d63a65df6d269315ec11bfb7e8d /tools/testing/selftests/kvm/s390x
parent94c4b76b88d40f9062dc32ff2fff551ae1791c1e (diff)
selftests: KVM: s390: fix early guest crash
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>
Diffstat (limited to 'tools/testing/selftests/kvm/s390x')
-rw-r--r--tools/testing/selftests/kvm/s390x/resets.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/tools/testing/selftests/kvm/s390x/resets.c b/tools/testing/selftests/kvm/s390x/resets.c
index bf04d77de16b..83624d0b1453 100644
--- a/tools/testing/selftests/kvm/s390x/resets.c
+++ b/tools/testing/selftests/kvm/s390x/resets.c
@@ -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);
}