On 11/02/2010 03:45 PM, Gleb Natapov wrote: > kvm_event_needs_reinjection() checks for nmi/interrupts that > need reinjection (not injection). Those are nmi/interrupts that > was injected but injection failed for some reason. For nmi, for > instance, kvm_arch_vcpu_runnable() checks vcpu->arch.nmi_pending, > but kvm_event_needs_reinjection() checks for vcpu->arch.nmi_injected. > NMI moves from nmi_pending to nmi_injected when it is injected into vcpu > for the first time. CPU cannot be halted in this state. > Yeah, nmi is handled like this way, but for interrupt: If interruption controller is in userspace (!irqchip_in_kernel(v->kvm)), kvm_arch_vcpu_runnable() checks vcpu->arch.interrupt.pending and kvm_event_needs_reinjection() also checks vcpu->arch.interrupt.pending. Consider this case: - Guest vcpu executes 'HLT' - wakeup the vcpu and inject interrupt and apfs is completed at this time - then the vcpu can't handle apf completion and .done list keeps nonempty. Can this case happen? Sorry if i missed it again. >> Also, the pv guest can only handle an apf completion at one time, it can not ensure >> vcpu->async_pf.done is empty after kvm_check_async_pf_completion() >> > In case of PV guest it will be woken up by apf completion by > kvm_arch_async_page_present() below. ...... >> As i know, exception can not let guest exit halt state, only NMI/interruption can do it, yes? :-) > On physical HW exception cannot happen while cpu is in halt state, but > with PV we define what guest can and cannot expect, so when guest > explicitly enables apf it should be able to handle it during halt. > Ah, i see, thanks your very much. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html