diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2011-11-21 19:14:08 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-11-27 13:42:02 +0200 |
commit | a26b6a63a988fe8de1f5f8793c12edc009676014 (patch) | |
tree | f5d013797644bcdffeb64a7cd73de53d0914253e | |
parent | 360e6724867d825e3af6b27c1c54869719196636 (diff) |
qemu-kvm: msix: Fire mask notifier on global mask changes
Also invoke the mask notifier if the global MSI-X mask is modified. For
this purpose, we push the notifier call from the per-vector mask update
to the central msix_handle_mask_update.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r-- | hw/msix.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -231,6 +231,12 @@ static void msix_handle_mask_update(PCIDevice *dev, int vector, bool was_masked) return; } + if (dev->msix_mask_notifier) { + int ret; + ret = dev->msix_mask_notifier(dev, vector, is_masked); + assert(ret >= 0); + } + if (!is_masked && msix_is_pending(dev, vector)) { msix_clr_pending(dev, vector); msix_notify(dev, vector); @@ -292,11 +298,6 @@ static void msix_mmio_write(void *opaque, target_phys_addr_t addr, if (kvm_enabled() && kvm_irqchip_in_kernel()) { kvm_msix_update(dev, vector, was_masked, msix_is_masked(dev, vector)); } - if (was_masked != msix_is_masked(dev, vector) && dev->msix_mask_notifier) { - int r = dev->msix_mask_notifier(dev, vector, - msix_is_masked(dev, vector)); - assert(r >= 0); - } msix_handle_mask_update(dev, vector, was_masked); } |