On 29/06/2017 10:44, Wanpeng Li wrote: >>> You still need to enable the preemption timer even if you return 1, so >>> in lapic.c it becomes >>> >>> if (!apic_lvtt_period(apic)) { >>> if (r) >>> apic_timer_expired(apic); >>> if (atomic_read(&apic->lapic_timer.pending)) >>> need_cancel = true; >>> } >> I think the codes are more clear but the same as above. We didn't >> program preemption timer vmcs field if delta == 0, so how to >> understand "need to enable the preemption timer even if return 1"? > I guess you mean start_hv_timer() should return true, right? vmx.c's set_hv_timer callback should set the preemption timer execution control. Otherwise, kvm_lapic_hv_timer_expired is again not called. Paolo