Messages in this thread | ![/](/images/icornerl.gif) | | Date | Tue, 02 Nov 2010 17:09:42 +0800 | From | Xiao Guangrong <> | Subject | Re: [RFC PATCH v2 7/7] KVM: KVM: don't break vcpu 'halt' state due to apfs |
| |
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.
| ![\](/images/icornerr.gif) |