On Tue, Nov 26, 2013 at 05:28:23PM +0100, Paolo Bonzini wrote: > Il 26/11/2013 17:24, Gleb Natapov ha scritto: > >> VCPU writes to routing table > >> e = entry from IRQ routing table > >> kvm_irq_routing_update(kvm, new); > >> VCPU resumes execution > >> kvm_set_msi_irq(e, &irq); > >> kvm_irq_delivery_to_apic_fast(); > >> > >> where the entry is stale but the VCPU has already resumed execution. > > > > So how is it different from what we have now: > > > > disable_irq() > > VCPU writes to routing table > > e = entry from IRQ routing table > > kvm_set_msi_irq(e, &irq); > > kvm_irq_delivery_to_apic_fast(); > > kvm_irq_routing_update(kvm, new); > > synchronize_rcu() > > VCPU resumes execution > > enable_irq() > > receive stale irq > > Adding a "disable/enable IRQs" looks like a relatively big change. But > perhaps it's not for some reason I'm missing. > You will receive stale irq even without disable/enable IRQs of course. I put it there so that guest would have a chance to do stupid things like zeroing idt before receiving interrupt, but on real HW timing is different from what we emulate, so the same race may happen even without disable/enable IRQs. -- Gleb. -- 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