diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2012-08-17 08:58:49 +0200 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-08-23 17:02:28 -0300 |
commit | b5de1956d3af148b4ae911d66d650d5bf7ff2d1e (patch) | |
tree | b25b9033da360659e8658f62f63c8838f8fb6dab | |
parent | 078b3391e407c884d6989ed2e6a69e792251940e (diff) |
pci-assign: Only clean up registered IO resources
If we fail before or inside assigned_dev_register_regions, we so far
unconditionally unregistered IO resources, triggering an assertion in
the memory layer. Non-null u.r_baseport tells us if the region has been
registered.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r-- | hw/device-assignment.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 7b55ac93d..529e229e9 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -720,10 +720,12 @@ static void free_assigned_device(AssignedDevice *dev) continue; } if (pci_region->type & IORESOURCE_IO) { - memory_region_del_subregion(®ion->container, - ®ion->real_iomem); - memory_region_destroy(®ion->real_iomem); - memory_region_destroy(®ion->container); + if (region->u.r_baseport) { + memory_region_del_subregion(®ion->container, + ®ion->real_iomem); + memory_region_destroy(®ion->real_iomem); + memory_region_destroy(®ion->container); + } } else if (pci_region->type & IORESOURCE_MEM) { if (region->u.r_virtbase) { memory_region_del_subregion(®ion->container, |