All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
To: Ilya Leoshkevich <iii@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>,
	Janosch Frank <frankja@linux.ibm.com>,
	Heiko Carstens <hca@linux.ibm.com>,
	Vasily Gorbik <gor@linux.ibm.com>,
	Alexander Gordeev <agordeev@linux.ibm.com>,
	David Hildenbrand <david@redhat.com>,
	Sven Schnelle <svens@linux.ibm.com>,
	kvm@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Jens Freimann <jfreimann@redhat.com>
Subject: Re: [PATCH v4 2/6] KVM: s390: interrupt: Fix single-stepping into program interrupt handlers
Date: Tue, 25 Jul 2023 17:04:52 +0200	[thread overview]
Message-ID: <20230725170452.5d856439@p-imbrenda> (raw)
In-Reply-To: <20230725143857.228626-3-iii@linux.ibm.com>

On Tue, 25 Jul 2023 16:37:17 +0200
Ilya Leoshkevich <iii@linux.ibm.com> wrote:

> Currently, after single-stepping an instruction that generates a
> specification exception, GDB ends up on the instruction immediately
> following it.
> 
> The reason is that vcpu_post_run() injects the interrupt and sets
> KVM_GUESTDBG_EXIT_PENDING, causing a KVM_SINGLESTEP exit. The
> interrupt is not delivered, however, therefore userspace sees the
> address of the next instruction.
> 
> Fix by letting the __vcpu_run() loop go into the next iteration,
> where vcpu_pre_run() delivers the interrupt and sets
> KVM_GUESTDBG_EXIT_PENDING.
> 
> Reviewed-by: David Hildenbrand <david@redhat.com>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>

Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

> ---
>  arch/s390/kvm/intercept.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
> index 954d39adf85c..e54496740859 100644
> --- a/arch/s390/kvm/intercept.c
> +++ b/arch/s390/kvm/intercept.c
> @@ -228,6 +228,21 @@ static int handle_itdb(struct kvm_vcpu *vcpu)
>  
>  #define per_event(vcpu) (vcpu->arch.sie_block->iprcc & PGM_PER)
>  
> +static bool should_handle_per_event(const struct kvm_vcpu *vcpu)
> +{
> +	if (!guestdbg_enabled(vcpu) || !per_event(vcpu))
> +		return false;
> +	if (guestdbg_sstep_enabled(vcpu) &&
> +	    vcpu->arch.sie_block->iprcc != PGM_PER) {
> +		/*
> +		 * __vcpu_run() will exit after delivering the concurrently
> +		 * indicated condition.
> +		 */
> +		return false;
> +	}
> +	return true;
> +}
> +
>  static int handle_prog(struct kvm_vcpu *vcpu)
>  {
>  	psw_t psw;
> @@ -242,7 +257,7 @@ static int handle_prog(struct kvm_vcpu *vcpu)
>  	if (kvm_s390_pv_cpu_is_protected(vcpu))
>  		return -EOPNOTSUPP;
>  
> -	if (guestdbg_enabled(vcpu) && per_event(vcpu)) {
> +	if (should_handle_per_event(vcpu)) {
>  		rc = kvm_s390_handle_per_event(vcpu);
>  		if (rc)
>  			return rc;


  reply	other threads:[~2023-07-25 15:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25 14:37 [PATCH v4 0/6] KVM: s390: interrupt: Fix stepping into interrupt handlers Ilya Leoshkevich
2023-07-25 14:37 ` [PATCH v4 1/6] KVM: s390: interrupt: Fix single-stepping " Ilya Leoshkevich
2023-07-25 14:37 ` [PATCH v4 2/6] KVM: s390: interrupt: Fix single-stepping into program " Ilya Leoshkevich
2023-07-25 15:04   ` Claudio Imbrenda [this message]
2023-07-25 14:37 ` [PATCH v4 3/6] KVM: s390: interrupt: Fix single-stepping kernel-emulated instructions Ilya Leoshkevich
2023-07-25 14:37 ` [PATCH v4 4/6] KVM: s390: interrupt: Fix single-stepping userspace-emulated instructions Ilya Leoshkevich
2023-07-25 14:37 ` [PATCH v4 5/6] KVM: s390: interrupt: Fix single-stepping keyless mode exits Ilya Leoshkevich
2023-07-25 14:37 ` [PATCH v4 6/6] KVM: s390: selftests: Add selftest for single-stepping Ilya Leoshkevich
2023-08-02 22:24 ` [PATCH v4 0/6] KVM: s390: interrupt: Fix stepping into interrupt handlers Sean Christopherson
2023-08-03  7:48   ` Christian Borntraeger

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=20230725170452.5d856439@p-imbrenda \
    --to=imbrenda@linux.ibm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=iii@linux.ibm.com \
    --cc=jfreimann@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=svens@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.