diff options
-rw-r--r-- | hw/i386/kvm/pci-assign.c | 2 | ||||
-rw-r--r-- | hw/misc/ivshmem.c | 1 | ||||
-rw-r--r-- | hw/vfio/pci.c | 1 | ||||
-rw-r--r-- | hw/virtio/virtio-pci.c | 1 | ||||
-rw-r--r-- | include/sysemu/kvm.h | 2 | ||||
-rw-r--r-- | kvm-all.c | 2 | ||||
-rw-r--r-- | kvm-stub.c | 4 | ||||
-rw-r--r-- | target-i386/kvm.c | 1 |
8 files changed, 11 insertions, 3 deletions
diff --git a/hw/i386/kvm/pci-assign.c b/hw/i386/kvm/pci-assign.c index 334dfc4433..8238fbc630 100644 --- a/hw/i386/kvm/pci-assign.c +++ b/hw/i386/kvm/pci-assign.c @@ -1015,6 +1015,7 @@ static void assigned_dev_update_msi_msg(PCIDevice *pci_dev) kvm_irqchip_update_msi_route(kvm_state, assigned_dev->msi_virq[0], msi_get_message(pci_dev, 0), pci_dev); + kvm_irqchip_commit_routes(kvm_state); } static bool assigned_dev_msix_masked(MSIXTableEntry *entry) @@ -1602,6 +1603,7 @@ static void assigned_dev_msix_mmio_write(void *opaque, hwaddr addr, if (ret) { error_report("Error updating irq routing entry (%d)", ret); } + kvm_irqchip_commit_routes(kvm_state); } } } diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 023da84004..40a2ebca20 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -322,6 +322,7 @@ static int ivshmem_vector_unmask(PCIDevice *dev, unsigned vector, if (ret < 0) { return ret; } + kvm_irqchip_commit_routes(kvm_state); return kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, n, NULL, v->virq); } diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 87a6f05c65..7bfa17ce38 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -458,6 +458,7 @@ static void vfio_update_kvm_msi_virq(VFIOMSIVector *vector, MSIMessage msg, PCIDevice *pdev) { kvm_irqchip_update_msi_route(kvm_state, vector->virq, msg, pdev); + kvm_irqchip_commit_routes(kvm_state); } static int vfio_msix_vector_do_use(PCIDevice *pdev, unsigned int nr, diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index cbdfd59071..f0677b73d8 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -842,6 +842,7 @@ static int virtio_pci_vq_vector_unmask(VirtIOPCIProxy *proxy, if (ret < 0) { return ret; } + kvm_irqchip_commit_routes(kvm_state); } } diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index 0a16e0eb10..c9c243631e 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -371,7 +371,6 @@ int kvm_set_irq(KVMState *s, int irq, int level); int kvm_irqchip_send_msi(KVMState *s, MSIMessage msg); void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int pin); -void kvm_irqchip_commit_routes(KVMState *s); void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic); void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic); @@ -494,6 +493,7 @@ static inline void cpu_synchronize_post_init(CPUState *cpu) int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev); int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg, PCIDevice *dev); +void kvm_irqchip_commit_routes(KVMState *s); void kvm_irqchip_release_virq(KVMState *s, int virq); int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter); @@ -1094,8 +1094,6 @@ static int kvm_update_routing_entry(KVMState *s, *entry = *new_entry; - kvm_irqchip_commit_routes(s); - return 0; } diff --git a/kvm-stub.c b/kvm-stub.c index 982e5900b7..64e23f6be0 100644 --- a/kvm-stub.c +++ b/kvm-stub.c @@ -135,6 +135,10 @@ int kvm_irqchip_update_msi_route(KVMState *s, int virq, MSIMessage msg, return -ENOSYS; } +void kvm_irqchip_commit_routes(KVMState *s) +{ +} + int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter) { return -ENOSYS; diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 61f57f9f20..0a09be656e 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -3427,6 +3427,7 @@ static void kvm_update_msi_routes_all(void *private, bool global, kvm_irqchip_update_msi_route(kvm_state, entry->virq, msg, entry->dev); } + kvm_irqchip_commit_routes(kvm_state); trace_kvm_x86_update_msi_routes(cnt); } |