All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoffer Dall <cdall@linaro.org>
To: Andrew Jones <drjones@redhat.com>
Cc: marc.zyngier@arm.com, kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH 5/5] KVM: arm/arm64: kvm_arch_vcpu_runnable: don't miss injected irqs
Date: Wed, 18 Oct 2017 15:18:43 +0200	[thread overview]
Message-ID: <20171018131843.GD8900@cbox> (raw)
In-Reply-To: <20171018121305.imlyjg7tssfjqc53@kamzik.brq.redhat.com>

On Wed, Oct 18, 2017 at 02:13:05PM +0200, Andrew Jones wrote:
> On Sat, Oct 14, 2017 at 09:13:35PM +0200, Christoffer Dall wrote:
> > On Fri, Sep 29, 2017 at 01:30:41PM +0200, Andrew Jones wrote:
> > > When the vPMU is in use if a VCPU's perf event overflow handler
> > > were to fire after the VCPU started waiting, then the wake up
> > > done by the kvm_vcpu_kick() call in the handler would do nothing,
> > > as no "pmu overflow" state is checked in kvm_arch_vcpu_runnable().
> > > Fix this by checking the IRQ_PENDING VCPU request in runnable().
> > > Checking the request also sufficiently covers all the cases that
> > > kvm_vgic_vcpu_pending_irq() cover, so we can just replace that.
> > > 
> > > Signed-off-by: Andrew Jones <drjones@redhat.com>
> > > ---
> > >  virt/kvm/arm/arm.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
> > > index 5bc9b0d2fd0f..725527f491e4 100644
> > > --- a/virt/kvm/arm/arm.c
> > > +++ b/virt/kvm/arm/arm.c
> > > @@ -423,7 +423,7 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu)
> > >  	return !vcpu_should_sleep(vcpu) &&
> > >  	       (vcpu->arch.mp_state != KVM_MP_STATE_HALTED ||
> > >  		(!!vcpu->arch.irq_lines ||
> > > -		 kvm_vgic_vcpu_pending_irq(vcpu)));
> > > +		 kvm_test_request(KVM_REQ_IRQ_PENDING, vcpu)));
> > 
> > So what if a VCPU blocks, a device raises an IRQ, the VCPU loops around,
> > clears the KVM_REQ_IRQ_PENDING flag, enters the VM again, which does
> > another WFI (for fun), and you end up here again with a pending IRQ but
> > no KVM_REQ_IRQ_PENDING flag anymore.  Doesn't this end up incorrectly
> > stalling the VCPU?
> 
> Hmm, I see what you mean. I'm sorry I missed that.
> 
> > 
> > I don't think that a transient flag will work for a persistent binary
> > state here.
> 
> I think we can fix it by adding
> 
>  if (kvm_vgic_vcpu_pending_irq(vcpu))
>      kvm_make_request(KVM_REQ_IRQ_PENDING, vcpu);
> 
> to kvm_vgic_sync_hwstate(), if the additional overhead would be
> acceptable. Otherwise we need to find some other way to ensure
> vPMU irqs unblock the VCPU.
> 

I think you just need to check
  kvm_vgic_vcpu_pending_irq() ||
  kvm_test_request(KVM_REQ_IRQ_PENDING, vcpu)

Wouldn't that fix it?

Thanks,
-Christoffer

  reply	other threads:[~2017-10-18 13:17 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-29 11:30 [PATCH 0/5] kvm_arch_vcpu_runnable related improvements Andrew Jones
2017-09-29 11:30 ` [PATCH 1/5] KVM: arm/arm64: tidy 'should sleep' conditions Andrew Jones
2017-10-05  8:13   ` Marc Zyngier
2017-09-29 11:30 ` [PATCH 2/5] KVM: arm/arm64: replace power_off with mp_state=STOPPED Andrew Jones
2017-10-05  8:32   ` Marc Zyngier
2017-10-10 13:26     ` Andrew Jones
2017-10-14 19:12   ` Christoffer Dall
2017-10-18 12:04     ` Andrew Jones
2017-09-29 11:30 ` [PATCH 3/5] KVM: arm/arm64: factor out common wfe/wfi emulation code Andrew Jones
2017-10-05  8:36   ` Marc Zyngier
2017-10-14 19:13   ` Christoffer Dall
2017-10-18 12:06     ` Andrew Jones
2017-09-29 11:30 ` [PATCH 4/5] KVM: arm/arm64: improve kvm_arch_vcpu_runnable Andrew Jones
2017-10-05  9:19   ` Marc Zyngier
2017-10-14 19:13   ` Christoffer Dall
2017-10-18 12:09     ` Andrew Jones
2017-09-29 11:30 ` [PATCH 5/5] KVM: arm/arm64: kvm_arch_vcpu_runnable: don't miss injected irqs Andrew Jones
2017-10-05  9:37   ` Marc Zyngier
2017-10-10 13:28     ` Andrew Jones
2017-10-14 19:13   ` Christoffer Dall
2017-10-18 12:13     ` Andrew Jones
2017-10-18 13:18       ` Christoffer Dall [this message]
2017-10-18 13:55         ` Andrew Jones
2017-10-18 14:14           ` Christoffer Dall
2017-10-02  8:31 ` [PATCH 6/5] KVM: arm/arm64: make kvm_vgic_vcpu_pending_irq static Andrew Jones
2017-10-05  9:37   ` Marc Zyngier

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=20171018131843.GD8900@cbox \
    --to=cdall@linaro.org \
    --cc=drjones@redhat.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=marc.zyngier@arm.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.