diff options
author | Longpeng(Mike) <longpeng2@huawei.com> | 2022-03-26 14:02:24 +0800 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2022-05-06 09:06:50 -0600 |
commit | 8ab217d5d34275ee471a3b085ec90728b8f06d80 (patch) | |
tree | 1213ecaf73b1a3be523322978b5aaf99dd5a038f /hw/vfio | |
parent | be4a46eccfe97069fd62f967f6660407c9aa2a03 (diff) | |
download | qemu-8ab217d5d34275ee471a3b085ec90728b8f06d80.zip qemu-8ab217d5d34275ee471a3b085ec90728b8f06d80.tar.gz qemu-8ab217d5d34275ee471a3b085ec90728b8f06d80.tar.bz2 |
vfio: simplify the failure path in vfio_msi_enable
Use vfio_msi_disable_common to simplify the error handling
in vfio_msi_enable.
Signed-off-by: Longpeng(Mike) <longpeng2@huawei.com>
Link: https://lore.kernel.org/r/20220326060226.1892-4-longpeng2@huawei.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'hw/vfio')
-rw-r--r-- | hw/vfio/pci.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index b3c27c2..5056262 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -47,6 +47,7 @@ static void vfio_disable_interrupts(VFIOPCIDevice *vdev); static void vfio_mmap_set_enabled(VFIOPCIDevice *vdev, bool enabled); +static void vfio_msi_disable_common(VFIOPCIDevice *vdev); /* * Disabling BAR mmaping can be slow, but toggling it around INTx can @@ -658,24 +659,12 @@ retry: "MSI vectors, retry with %d", vdev->nr_vectors, ret); } - for (i = 0; i < vdev->nr_vectors; i++) { - VFIOMSIVector *vector = &vdev->msi_vectors[i]; - if (vector->virq >= 0) { - vfio_remove_kvm_msi_virq(vector); - } - qemu_set_fd_handler(event_notifier_get_fd(&vector->interrupt), - NULL, NULL, NULL); - event_notifier_cleanup(&vector->interrupt); - } - - g_free(vdev->msi_vectors); - vdev->msi_vectors = NULL; + vfio_msi_disable_common(vdev); if (ret > 0) { vdev->nr_vectors = ret; goto retry; } - vdev->nr_vectors = 0; /* * Failing to setup MSI doesn't really fall within any specification. @@ -683,7 +672,6 @@ retry: * out to fall back to INTx for this device. */ error_report("vfio: Error: Failed to enable MSI"); - vdev->interrupt = VFIO_INT_NONE; return; } |