]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: s390: selftests: Streamline uc_skey test to issue iske after sske
authorChristoph Schlameuss <schlameuss@linux.ibm.com>
Tue, 28 Jan 2025 13:18:03 +0000 (14:18 +0100)
committerClaudio Imbrenda <imbrenda@linux.ibm.com>
Fri, 31 Jan 2025 11:03:53 +0000 (12:03 +0100)
In some rare situations a non default storage key is already set on the
memory used by the test. Within normal VMs the key is reset / zapped
when the memory is added to the VM. This is not the case for ucontrol
VMs. With the initial iske check removed this test case can work in all
situations. The function of the iske instruction is still validated by
the remaining code.

Fixes: 0185fbc6a2d3 ("KVM: s390: selftests: Add uc_skey VM test case")
Signed-off-by: Christoph Schlameuss <schlameuss@linux.ibm.com>
Link: https://lore.kernel.org/r/20250128131803.1047388-1-schlameuss@linux.ibm.com
Message-ID: <20250128131803.1047388-1-schlameuss@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
tools/testing/selftests/kvm/s390/ucontrol_test.c

index 22ce9219620ce8a6e596990b3129fffe0572a862..d265b34c54be849eec2d7340312703633d81b089 100644 (file)
@@ -88,10 +88,6 @@ asm("test_skey_asm:\n"
        "       ahi     %r0,1\n"
        "       st      %r1,0(%r5,%r6)\n"
 
-       "       iske    %r1,%r6\n"
-       "       ahi     %r0,1\n"
-       "       diag    0,0,0x44\n"
-
        "       sske    %r1,%r6\n"
        "       xgr     %r1,%r1\n"
        "       iske    %r1,%r6\n"
@@ -600,7 +596,9 @@ TEST_F(uc_kvm, uc_skey)
        ASSERT_EQ(true, uc_handle_exit(self));
        ASSERT_EQ(1, sync_regs->gprs[0]);
 
-       /* ISKE */
+       /* SSKE + ISKE */
+       sync_regs->gprs[1] = skeyvalue;
+       run->kvm_dirty_regs |= KVM_SYNC_GPRS;
        ASSERT_EQ(0, uc_run_once(self));
 
        /*
@@ -612,21 +610,11 @@ TEST_F(uc_kvm, uc_skey)
        TEST_ASSERT_EQ(0, sie_block->ictl & (ICTL_ISKE | ICTL_SSKE | ICTL_RRBE));
        TEST_ASSERT_EQ(KVM_EXIT_S390_SIEIC, self->run->exit_reason);
        TEST_ASSERT_EQ(ICPT_INST, sie_block->icptcode);
-       TEST_REQUIRE(sie_block->ipa != 0xb229);
+       TEST_REQUIRE(sie_block->ipa != 0xb22b);
 
-       /* ISKE contd. */
+       /* SSKE + ISKE contd. */
        ASSERT_EQ(false, uc_handle_exit(self));
        ASSERT_EQ(2, sync_regs->gprs[0]);
-       /* assert initial skey (ACC = 0, R & C = 1) */
-       ASSERT_EQ(0x06, sync_regs->gprs[1]);
-       uc_assert_diag44(self);
-
-       /* SSKE + ISKE */
-       sync_regs->gprs[1] = skeyvalue;
-       run->kvm_dirty_regs |= KVM_SYNC_GPRS;
-       ASSERT_EQ(0, uc_run_once(self));
-       ASSERT_EQ(false, uc_handle_exit(self));
-       ASSERT_EQ(3, sync_regs->gprs[0]);
        ASSERT_EQ(skeyvalue, sync_regs->gprs[1]);
        uc_assert_diag44(self);
 
@@ -635,7 +623,7 @@ TEST_F(uc_kvm, uc_skey)
        run->kvm_dirty_regs |= KVM_SYNC_GPRS;
        ASSERT_EQ(0, uc_run_once(self));
        ASSERT_EQ(false, uc_handle_exit(self));
-       ASSERT_EQ(4, sync_regs->gprs[0]);
+       ASSERT_EQ(3, sync_regs->gprs[0]);
        /* assert R reset but rest of skey unchanged */
        ASSERT_EQ(skeyvalue & 0xfa, sync_regs->gprs[1]);
        ASSERT_EQ(0, sync_regs->gprs[1] & 0x04);