From: Janosch Frank <frankja@linux.ibm.com>
To: pbonzini@redhat.com
Cc: kvm@vger.kernel.org, frankja@linux.ibm.com, david@redhat.com,
borntraeger@linux.ibm.com, cohuck@redhat.com,
linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
hca@linux.ibm.com, mihajlov@linux.ibm.com, seiden@linux.ibm.com,
akrowiak@linux.ibm.com
Subject: [GIT PULL 01/22] KVM: s390: interrupt: Fix single-stepping into interrupt handlers
Date: Thu, 24 Aug 2023 14:43:10 +0200 [thread overview]
Message-ID: <20230824124522.75408-2-frankja@linux.ibm.com> (raw)
In-Reply-To: <20230824124522.75408-1-frankja@linux.ibm.com>
From: Ilya Leoshkevich <iii@linux.ibm.com>
After single-stepping an instruction that generates an interrupt, GDB
ends up on the second instruction of the respective interrupt handler.
The reason is that vcpu_pre_run() manually delivers the interrupt, and
then __vcpu_run() runs the first handler instruction using the
CPUSTAT_P flag. This causes a KVM_SINGLESTEP exit on the second handler
instruction.
Fix by delaying the KVM_SINGLESTEP exit until after the manual
interrupt delivery.
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20230725143857.228626-2-iii@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
arch/s390/kvm/interrupt.c | 14 ++++++++++++++
arch/s390/kvm/kvm-s390.c | 4 ++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
index 9bd0a873f3b1..85e39f472bb4 100644
--- a/arch/s390/kvm/interrupt.c
+++ b/arch/s390/kvm/interrupt.c
@@ -1392,6 +1392,7 @@ int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
{
struct kvm_s390_local_interrupt *li = &vcpu->arch.local_int;
int rc = 0;
+ bool delivered = false;
unsigned long irq_type;
unsigned long irqs;
@@ -1465,6 +1466,19 @@ int __must_check kvm_s390_deliver_pending_interrupts(struct kvm_vcpu *vcpu)
WARN_ONCE(1, "Unknown pending irq type %ld", irq_type);
clear_bit(irq_type, &li->pending_irqs);
}
+ delivered |= !rc;
+ }
+
+ /*
+ * We delivered at least one interrupt and modified the PC. Force a
+ * singlestep event now.
+ */
+ if (delivered && guestdbg_sstep_enabled(vcpu)) {
+ struct kvm_debug_exit_arch *debug_exit = &vcpu->run->debug.arch;
+
+ debug_exit->addr = vcpu->arch.sie_block->gpsw.addr;
+ debug_exit->type = KVM_SINGLESTEP;
+ vcpu->guest_debug |= KVM_GUESTDBG_EXIT_PENDING;
}
set_intercept_indicators(vcpu);
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index d1e768bcfe1d..0c6333b108ba 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -4611,7 +4611,7 @@ static int vcpu_pre_run(struct kvm_vcpu *vcpu)
if (!kvm_is_ucontrol(vcpu->kvm)) {
rc = kvm_s390_deliver_pending_interrupts(vcpu);
- if (rc)
+ if (rc || guestdbg_exit_pending(vcpu))
return rc;
}
@@ -4738,7 +4738,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu)
do {
rc = vcpu_pre_run(vcpu);
- if (rc)
+ if (rc || guestdbg_exit_pending(vcpu))
break;
kvm_vcpu_srcu_read_unlock(vcpu);
--
2.41.0
next prev parent reply other threads:[~2023-08-24 12:47 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-24 12:43 [GIT PULL 00/22] KVM: s390: Changes for 6.6 Janosch Frank
2023-08-24 12:43 ` Janosch Frank [this message]
2023-08-24 12:43 ` [GIT PULL 02/22] KVM: s390: interrupt: Fix single-stepping into program interrupt handlers Janosch Frank
2023-08-24 12:43 ` [GIT PULL 03/22] KVM: s390: interrupt: Fix single-stepping kernel-emulated instructions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 04/22] KVM: s390: interrupt: Fix single-stepping userspace-emulated instructions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 05/22] KVM: s390: interrupt: Fix single-stepping keyless mode exits Janosch Frank
2023-08-24 12:43 ` [GIT PULL 06/22] KVM: s390: selftests: Add selftest for single-stepping Janosch Frank
2023-08-24 12:43 ` [GIT PULL 07/22] s390/vfio-ap: no need to check the 'E' and 'I' bits in APQSW after TAPQ Janosch Frank
2023-08-24 12:43 ` [GIT PULL 08/22] s390/vfio-ap: clean up irq resources if possible Janosch Frank
2023-08-24 12:43 ` [GIT PULL 09/22] s390/vfio-ap: wait for response code 05 to clear on queue reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 10/22] s390/vfio-ap: allow deconfigured queue to be passed through to a guest Janosch Frank
2023-08-24 12:43 ` [GIT PULL 11/22] s390/vfio-ap: remove upper limit on wait for queue reset to complete Janosch Frank
2023-08-24 12:43 ` [GIT PULL 12/22] s390/vfio-ap: store entire AP queue status word with the queue object Janosch Frank
2023-08-24 12:43 ` [GIT PULL 13/22] s390/vfio-ap: use work struct to verify queue reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 14/22] s390/vfio-ap: handle queue state change in progress on reset Janosch Frank
2023-08-24 12:43 ` [GIT PULL 15/22] s390/vfio-ap: check for TAPQ response codes 0x35 and 0x36 Janosch Frank
2023-08-24 12:43 ` [GIT PULL 16/22] s390/uv: export uv_pin_shared for direct usage Janosch Frank
2023-08-24 12:43 ` [GIT PULL 17/22] KVM: s390: export kvm_s390_pv*_is_protected functions Janosch Frank
2023-08-24 12:43 ` [GIT PULL 18/22] s390/vfio-ap: make sure nib is shared Janosch Frank
2023-08-24 12:43 ` [GIT PULL 19/22] KVM: s390: pv: relax WARN_ONCE condition for destroy fast Janosch Frank
2023-08-24 12:43 ` [GIT PULL 20/22] s390/uv: UV feature check utility Janosch Frank
2023-08-24 12:43 ` [GIT PULL 21/22] KVM: s390: Add UV feature negotiation Janosch Frank
2023-08-24 12:43 ` [GIT PULL 22/22] KVM: s390: pv: Allow AP-instructions for pv-guests Janosch Frank
2023-08-25 13:56 ` [GIT PULL 00/22] KVM: s390: Changes for 6.6 Janosch Frank
2023-08-25 15:58 ` Sean Christopherson
2023-08-28 12:34 ` Janosch Frank
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230824124522.75408-2-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=akrowiak@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=hca@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mihajlov@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=seiden@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox