Re: [Qemu-devel] [RFC] create a single workqueue for each vm to update vm irq routing table

Avi Kivity
2013-11-26T16:29:22Z

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.