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