On 11/26/2013 06:28 PM, 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.


Those are guest operations, which may not be there at all.

Reply via email to