Add a function to fully free the AssignedDevice and AssignedDevInfo
and remove from the list.

Signed-off-by: Mark McLoughlin <[EMAIL PROTECTED]>
---
 qemu/hw/device-assignment.c |   16 ++++++++++++++--
 qemu/hw/device-assignment.h |    1 +
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/qemu/hw/device-assignment.c b/qemu/hw/device-assignment.c
index fde17ac..2836059 100644
--- a/qemu/hw/device-assignment.c
+++ b/qemu/hw/device-assignment.c
@@ -439,6 +439,19 @@ again:
 
 static LIST_HEAD(, AssignedDevInfo) adev_head;
 
+void free_assigned_device(AssignedDevInfo *adev)
+{
+    AssignedDevice *dev = adev->assigned_dev;
+
+    if (dev) {
+        pci_unregister_device(&dev->dev);
+        adev->assigned_dev = dev = NULL;
+    }
+
+    LIST_REMOVE(adev, next);
+    qemu_free(adev);
+}
+
 static uint32_t calc_assigned_dev_id(uint8_t bus, uint8_t devfn)
 {
     return (uint32_t)bus << 8 | (uint32_t)devfn;
@@ -479,8 +492,7 @@ void assigned_dev_update_irq(PCIDevice *d)
                         adev->name, strerror(-r));
                 fprintf(stderr, "Perhaps you re you assigning a device "
                         "that shares IRQ with another device?\n");
-                LIST_REMOVE(adev, next);
-                pci_unregister_device(&assigned_dev->dev);
+                free_assigned_device(adev);
                 adev = next;
                 continue;
             }
diff --git a/qemu/hw/device-assignment.h b/qemu/hw/device-assignment.h
index 5a01d98..c8c47d3 100644
--- a/qemu/hw/device-assignment.h
+++ b/qemu/hw/device-assignment.h
@@ -94,6 +94,7 @@ struct AssignedDevInfo {
     int disable_iommu;
 };
 
+void free_assigned_device(AssignedDevInfo *adev);
 PCIDevice *init_assigned_device(AssignedDevInfo *adev, PCIBus *bus);
 AssignedDevInfo *add_assigned_device(const char *arg);
 void add_assigned_devices(PCIBus *bus, const char **devices, int n_devices);
-- 
1.5.4.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to