On Thu, Nov 26, 2009 at 03:14:04PM +0800, Liang YANG wrote:
> I think Kurt have a clear view on interrupt deliver routine.
> Maybe when a outer physical interrupt yield durning the guest running
> on cpu, this interrupt cause the guest exit
> and eventually delived to the host to be disposed. Is that right ?
> 
Correct.

> Thanks for everybody's reply.
> 
> On Tue, Nov 24, 2009 at 4:49 PM, Alexander Graf <[email protected]> wrote:
> >
> > On 24.11.2009, at 09:03, Kurt Kiefer wrote:
> >
> >> I've been studying interrupt delivery in KVM myself lately. I hope I can 
> >> explain what I've found, but, as I'm pretty new to this, please take my 
> >> answer with a grain of salt (as I could be wrong). I would really 
> >> appreciate if someone could correct me here if I am wrong or provide more 
> >> details!
> >>
> >> Interrupts from the guest might be delivered via the ioctl KVM_INTERRUPT 
> >> only when the KVM kmod can do interrupt routing. However, the default 
> >> setup for KVM these days implements the interrupt controller in the 
> >> kernel, so this ioctl is unused, and thus, vmx_inject_irq is not directly 
> >> triggered from userspace. The call to vmx_inject_irq is made upon re-entry 
> >> to the guest after I.E. the local APIC in the kmod flags that it needs 
> >> service.
> >>
> >> To use the example of a PS2 keyboard press, the control flow works like 
> >> this:
> >>
> >> 1. Userspace writes to appropriate locations as defined by the i8042 
> >> emulator
> >> 2. Userspace calls vm ioctl KVM_IRQ_LINE (IRQ=1, Level=1)
> >> 3. Control in the kmod eventually makes a call to kvm_apic_set_irq
> >> 4. In the local APIC, __apic_accept_irq does a part in setting up the need 
> >> for service
> >> 5. Upon guest entry (vcpu_enter_guest), if there is no nmi and 
> >> kvm_apic_has_interrupt, the host will call inject_pending_irq
> >> 6. inject_pending_irq calls vmx_inject_irq
> >>
> >> In attempting to answer the second part of your question, I realize this 
> >> point isn't 100% clear to me either. It would seem the point at which the 
> >> interrupt is delivered to KVM is always the point at which the guest VCPU 
> >> is entered. Obviously, if you have a multi-cpu setup the calls to set up 
> >> the local apic can be done in parallel to running the guest, but interrupt 
> >> delivery won't happen until the vcpu is re-entered. This seems to mean 
> >> that interrupts are only delivered when the guest is scheduled out and 
> >> back in by the kernel. Is this right, guys?
> >
> > It means that interrupts are delivered on guest entries. That doesn't mean 
> > you have to exit the vcpu thread. You can just as well still be in the vcpu 
> > run loop.
> >
> > So if you for example get a #PF in the guest that is trapped by the host 
> > because of shadow paging, KVM will check for pending irqs again.
> >
> > Alex
> 
> 
> 
> -- 
> BestRegards.
> YangLiang
> _____________________________________________
>  Master Candidate.
>  Department of Computer Science .
>  School of Electronics Engineering & Computer Science .
> _____________________________________________
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
                        Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to