From: Paolo Bonzini <pbonzini@redhat.com>
To: "Wu, Feng" <feng.wu@intel.com>, "Michael S. Tsirkin" <mst@redhat.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"yang.zhang.wz@gmail.com" <yang.zhang.wz@gmail.com>,
"rkrcmar@redhat.com" <rkrcmar@redhat.com>
Subject: Re: [PATCH 2/3] kvm: x86: do not use KVM_REQ_EVENT for APICv interrupt injection
Date: Wed, 28 Sep 2016 13:50:29 +0200 [thread overview]
Message-ID: <7b5daf1a-dd92-d199-a9b2-c6564b46f1fc@redhat.com> (raw)
In-Reply-To: <E959C4978C3B6342920538CF579893F019881181@SHSMSX104.ccr.corp.intel.com>
On 28/09/2016 13:40, Wu, Feng wrote:
> IIUIC, the issue you describe above is that IPI for posted-interrupts may be
> issued between
>
> vcpu->mode = IN_GUEST_MODE;
>
> and
>
> local_irq_disable();
>
> But if that really happens, we will call kvm_vcpu_kick() in
> vmx_deliver_posted_interrupt(), hence the vcpu->mode will be changed
> to EXITING_GUEST_MODE, then we will goto cancel_injection in
> vcpu_enter_guest, so the posted-interrupt will be delivered to guest
> in the next vmentry. Seems I cannot see the problem. Do I miss something?
No, if that happens kvm_trigger_posted_interrupt returns true, hence
kvm_vcpu_kick is not called. With the fix, the IPI is processed as soon
as the guest enters non-root mode, and the interrupt is injected.
The other issue occurs when the IPI is sent between
kvm_x86_ops->hwapic_irr_update(vcpu,
kvm_lapic_find_highest_irr(vcpu));
and
vcpu->mode = IN_GUEST_MODE;
In this case, kvm_vcpu_kick is called but it (correctly) doesn't do
anything because it sees vcpu->mode == OUTSIDE_GUEST_MODE. Then the
guest is entered with PIR.ON, but the PI interrupt is not pending and
hence the interrupt is never delivered to the guest. The fix for this
is to move the RVI update after IN_GUEST_MODE. Then the source CPU uses
the posted interrupt IPI instead of kvm_cpu_kick, and everything works.
Paolo
next prev parent reply other threads:[~2016-09-28 11:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-27 21:20 [RFC PATCH 0/3] kvm: x86: speedups for APICv Paolo Bonzini
2016-09-27 21:20 ` [PATCH 1/3] kvm: x86: avoid atomic operations on APICv vmentry Paolo Bonzini
2016-09-27 21:20 ` [PATCH 2/3] kvm: x86: do not use KVM_REQ_EVENT for APICv interrupt injection Paolo Bonzini
2016-09-27 23:07 ` Michael S. Tsirkin
2016-09-28 8:21 ` Paolo Bonzini
2016-09-28 11:40 ` Wu, Feng
2016-09-28 11:50 ` Paolo Bonzini [this message]
2016-09-28 12:06 ` Wu, Feng
2016-09-28 12:14 ` Paolo Bonzini
2016-10-14 7:37 ` Yang Zhang
2016-10-14 8:12 ` Paolo Bonzini
2016-09-28 13:46 ` Michael S. Tsirkin
2016-09-28 14:08 ` Paolo Bonzini
2016-09-28 10:04 ` Wu, Feng
2016-09-28 10:16 ` Paolo Bonzini
2016-09-28 11:53 ` Wu, Feng
2016-09-28 11:55 ` Paolo Bonzini
2016-09-28 12:07 ` Wu, Feng
2016-10-14 7:12 ` Yang Zhang
2016-09-27 21:20 ` [PATCH 3/3] KVM: x86: do not scan IRR twice on APICv vmentry Paolo Bonzini
2016-09-28 14:00 ` Michael S. Tsirkin
2016-09-28 14:44 ` Paolo Bonzini
2016-09-29 2:51 ` Wu, Feng
2016-10-14 7:32 ` Yang Zhang
2016-10-14 7:45 ` Paolo Bonzini
2016-09-29 19:55 ` [RFC PATCH 0/3] kvm: x86: speedups for APICv Radim Krčmář
2016-09-29 21:41 ` Paolo Bonzini
2016-09-30 13:23 ` Radim Krčmář
2016-09-30 13:33 ` Radim Krčmář
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=7b5daf1a-dd92-d199-a9b2-c6564b46f1fc@redhat.com \
--to=pbonzini@redhat.com \
--cc=feng.wu@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=yang.zhang.wz@gmail.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
all inboxes | Powered by JetHome®