From: Gleb Natapov <gleb@redhat.com>
To: "Zhang, Yang Z" <yang.z.zhang@intel.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"Tian, Kevin" <kevin.tian@intel.com>
Subject: Re: [PATCH v3 3/4] x86, apicv: add virtual interrupt delivery support
Date: Wed, 5 Dec 2012 16:34:18 +0200 [thread overview]
Message-ID: <20121205143418.GS19514@redhat.com> (raw)
In-Reply-To: <A9667DDFB95DB7438FA9D7D576C3D87E2D4988@SHSMSX101.ccr.corp.intel.com>
On Wed, Dec 05, 2012 at 02:16:52PM +0000, Zhang, Yang Z wrote:
> Gleb Natapov wrote on 2012-12-05:
> > On Wed, Dec 05, 2012 at 03:43:41AM +0000, Zhang, Yang Z wrote:
> >>>> @@ -5657,12 +5673,20 @@ static int vcpu_enter_guest(struct kvm_vcpu
> >>> *vcpu)
> >>>> }
> >>>>
> >>>> if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
> >>>> + /* update archtecture specific hints for APIC
> >>>> + * virtual interrupt delivery */
> >>>> + if (kvm_x86_ops->update_irq)
> >>>> + kvm_x86_ops->update_irq(vcpu);
> >>>> +
> >>>> inject_pending_event(vcpu);
> >>>>
> >>>> /* enable NMI/IRQ window open exits if needed */
> >>>> if (vcpu->arch.nmi_pending)
> >>>> kvm_x86_ops->enable_nmi_window(vcpu);
> >>>> - else if (kvm_cpu_has_interrupt(vcpu) || req_int_win)
> >>>> + else if (kvm_apic_vid_enabled(vcpu)) {
> >>>> + if (kvm_cpu_has_extint(vcpu))
> >>>> + kvm_x86_ops->enable_irq_window(vcpu);
> >>>
> >>> If RVI is non-zero, then interrupt window should not be enabled,
> >>> accordingly to 29.2.2:
> >>>
> >>> "If a virtual interrupt has been recognized (see Section 29.2.1), it will
> >>> be delivered at an instruction boundary when the following conditions all
> >>> hold: (1) RFLAGS.IF = 1; (2) there is no blocking by STI; (3) there is no
> >>> blocking by MOV SS or by POP SS; and (4) the "interrupt-window exiting"
> >>> VM-execution control is 0."
> >> Right. Must check RVI here.
> >>
> > Why? We request interrupt window here because there is ExtINT interrupt
> > pending. ExtINT interrupt has a precedence over APIC interrupts (our
> > current code is incorrect!), so we want vmexit as soon as interrupts are
> >
> > allowed to inject ExtINT and we do not want virtual interrupt to be
> > delivered. I think the (4) there is exactly for this situation.
> One queston: kvm_cpu_has_extint() function check the interrupt from PIC. If PIC is working, APIC must in virtual wire mode. According to spec, when APIC is virtual wire mode, then APIC is totally bypassing. So apic_has_interrupt() and pic_has_interrupt() are mutually exclusive. If kvm_apic_has_interrupt() return true, then kvm_cpu_has_extint will never return true, and vice versa. Am I right? If answer is yes, then we don't check RVI here.
According to what spec "when APIC is virtual wire mode, then APIC is
totally bypassed"? SDP volume 3 section 10.8.2 says differently, but it
gives priority to ExtINT interrupts. And we do it other way around
currently, but your apicv patches actually do it correct by injecting
ExtINT if it is asserted without considering apic state.
--
Gleb.
next prev parent reply other threads:[~2012-12-05 14:34 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-03 7:01 [PATCH v3 0/4] x86, apicv: Add APIC virtualization support Yang Zhang
2012-12-03 7:01 ` [PATCH v3 1/4] x86: PIT connects to pin 2 of IOAPIC Yang Zhang
2012-12-03 9:42 ` Gleb Natapov
2012-12-04 5:32 ` Zhang, Yang Z
2012-12-04 12:55 ` Gleb Natapov
2012-12-05 1:28 ` Zhang, Yang Z
2012-12-03 7:01 ` [PATCH v3 2/4] x86, apicv: add APICv register virtualization support Yang Zhang
2012-12-05 0:29 ` Marcelo Tosatti
2012-12-05 3:17 ` Zhang, Yang Z
2012-12-05 23:11 ` Marcelo Tosatti
2012-12-06 6:45 ` Gleb Natapov
2012-12-03 7:01 ` [PATCH v3 3/4] x86, apicv: add virtual interrupt delivery support Yang Zhang
2012-12-03 11:37 ` Gleb Natapov
2012-12-04 6:39 ` Zhang, Yang Z
2012-12-04 10:58 ` Gleb Natapov
2012-12-05 1:55 ` Zhang, Yang Z
2012-12-05 5:02 ` Gleb Natapov
2012-12-05 6:02 ` Zhang, Yang Z
2012-12-05 10:18 ` Gleb Natapov
2012-12-05 13:51 ` Zhang, Yang Z
2012-12-05 14:00 ` Gleb Natapov
2012-12-06 2:55 ` Zhang, Yang Z
2012-12-06 7:07 ` Gleb Natapov
2012-12-06 7:16 ` Zhang, Yang Z
2012-12-06 7:19 ` Gleb Natapov
2012-12-06 7:20 ` Zhang, Yang Z
2012-12-04 16:46 ` Michael S. Tsirkin
2012-12-05 2:00 ` Marcelo Tosatti
2012-12-05 3:43 ` Zhang, Yang Z
2012-12-05 11:14 ` Gleb Natapov
2012-12-05 14:16 ` Zhang, Yang Z
2012-12-05 14:34 ` Gleb Natapov [this message]
2012-12-06 2:58 ` Zhang, Yang Z
2012-12-05 22:38 ` Marcelo Tosatti
2012-12-06 9:28 ` Gleb Natapov
2012-12-06 11:35 ` Zhang, Yang Z
2012-12-05 22:31 ` Marcelo Tosatti
2012-12-06 3:31 ` Zhang, Yang Z
2012-12-06 5:02 ` Zhang, Yang Z
2012-12-06 6:36 ` Gleb Natapov
2012-12-06 6:56 ` Zhang, Yang Z
2012-12-06 20:08 ` Marcelo Tosatti
2012-12-07 1:00 ` Zhang, Yang Z
2012-12-07 7:28 ` Gleb Natapov
2012-12-03 7:01 ` [PATCH v3 4/4] x86, apicv: add virtual x2apic support Yang Zhang
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=20121205143418.GS19514@redhat.com \
--to=gleb@redhat.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=yang.z.zhang@intel.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;
as well as URLs for NNTP newsgroup(s).