KVM: s390: interrupt: Fix single-stepping keyless mode exits
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 25 Jul 2023 14:37:20 +0000 (16:37 +0200)
committerJanosch Frank <frankja@linux.ibm.com>
Mon, 28 Aug 2023 09:24:20 +0000 (09:24 +0000)
kvm_s390_skey_check_enable() does not emulate any instructions, rather,
it clears CPUSTAT_KSS and arranges the instruction that caused the exit
(e.g., ISKE, SSKE, RRBE or LPSWE with a keyed PSW) to run again.

Therefore, skip the PER check and let the instruction execution happen.
Otherwise, a debugger will see two single-step events on the same
instruction.

Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20230725143857.228626-6-iii@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
arch/s390/kvm/intercept.c

index db222c7..9f64f27 100644 (file)
@@ -630,8 +630,8 @@ int kvm_handle_sie_intercept(struct kvm_vcpu *vcpu)
                rc = handle_partial_execution(vcpu);
                break;
        case ICPT_KSS:
-               rc = kvm_s390_skey_check_enable(vcpu);
-               break;
+               /* Instruction will be redriven, skip the PER check. */
+               return kvm_s390_skey_check_enable(vcpu);
        case ICPT_MCHKREQ:
        case ICPT_INT_ENABLE:
                /*