Message ID | 20230721120046.2262291-6-iii@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: s390: interrupt: Fix stepping into interrupt handlers | expand |
Am 21.07.23 um 13:57 schrieb Ilya Leoshkevich: > kvm_s390_skey_check_enable() does not emulate any instructions, rather, > it clears CPUSTAT_KSS and arranges for ISKE to run again. Therefore, > skip the PER check and let ISKE run happen. Otherwise a debugger will > see two single-step events on the same ISKE. The same would be true for all instruction triggering a keyless mode exit, like SSKE, RRBE but also LPSWE with a keyed PSW, no? > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com> > --- > arch/s390/kvm/intercept.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c > index d2f7940c5d03..8793cec066a6 100644 > --- a/arch/s390/kvm/intercept.c > +++ b/arch/s390/kvm/intercept.c > @@ -630,8 +630,7 @@ 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; maybe add a comment here: /* Instruction will be redriven, skip the PER check */ > + return kvm_s390_skey_check_enable(vcpu); > case ICPT_MCHKREQ: > case ICPT_INT_ENABLE: > /*
On 21.07.23 13:57, Ilya Leoshkevich wrote: > kvm_s390_skey_check_enable() does not emulate any instructions, rather, > it clears CPUSTAT_KSS and arranges for ISKE to run again. Therefore, > skip the PER check and let ISKE run happen. Otherwise a debugger will > see two single-step events on the same ISKE. > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- > arch/s390/kvm/intercept.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c > index d2f7940c5d03..8793cec066a6 100644 > --- a/arch/s390/kvm/intercept.c > +++ b/arch/s390/kvm/intercept.c > @@ -630,8 +630,7 @@ 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; > + return kvm_s390_skey_check_enable(vcpu); > case ICPT_MCHKREQ: > case ICPT_INT_ENABLE: > /* Reviewed-by: David Hildenbrand <david@redhat.com>
diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c index d2f7940c5d03..8793cec066a6 100644 --- a/arch/s390/kvm/intercept.c +++ b/arch/s390/kvm/intercept.c @@ -630,8 +630,7 @@ 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; + return kvm_s390_skey_check_enable(vcpu); case ICPT_MCHKREQ: case ICPT_INT_ENABLE: /*
kvm_s390_skey_check_enable() does not emulate any instructions, rather, it clears CPUSTAT_KSS and arranges for ISKE to run again. Therefore, skip the PER check and let ISKE run happen. Otherwise a debugger will see two single-step events on the same ISKE. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> --- arch/s390/kvm/intercept.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)