Roman Kagan <rkagan@xxxxxxxxxxxxx> writes: > On Mon, Nov 26, 2018 at 04:47:31PM +0100, Vitaly Kuznetsov wrote: >> @@ -379,6 +398,14 @@ void kvm_hv_synic_send_eoi(struct kvm_vcpu *vcpu, int vector) >> for (i = 0; i < ARRAY_SIZE(synic->sint); i++) >> if (synic_get_sint_vector(synic_read_sint(synic, i)) == vector) >> kvm_hv_notify_acked_sint(vcpu, i); >> + >> + for (i = 0; i < ARRAY_SIZE(hv_vcpu->stimer); i++) { >> + stimer = &hv_vcpu->stimer[i]; >> + if (stimer->msg_pending && stimer->config.enable && >> + stimer->config.direct_mode && >> + stimer->config.apic_vector == vector) >> + stimer_mark_pending(stimer, false); >> + } >> } > > While debugging another issue with synic timers, it just occurred to me > that with direct timers no extra processing is necessary on EOI: unlike > traditional synic timers which may have failed to deliver a message and > want to be notified when they can retry, direct timers just set the irq > directly in the apic. > > So this hunk shouldn't be needed, should it? Hm, you're probably right: kvm_apic_set_irq() fails only when apic is disabled (see APIC_DM_FIXED case in __apic_accept_irq()) and I'm not convinced we should re-try in this synthetic case. Let me test the hypothesis with Hyper-V on KVM, I'll come back with either a patch removing this over-engineered part or a reson for it to stay. Will do later this week. Thanks! -- Vitaly