summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2012-08-17 08:58:49 +0200
committerMarcelo Tosatti <mtosatti@redhat.com>2012-08-23 17:02:28 -0300
commitb5de1956d3af148b4ae911d66d650d5bf7ff2d1e (patch)
treeb25b9033da360659e8658f62f63c8838f8fb6dab
parent078b3391e407c884d6989ed2e6a69e792251940e (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.c10
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(&region->container,
- &region->real_iomem);
- memory_region_destroy(&region->real_iomem);
- memory_region_destroy(&region->container);
+ if (region->u.r_baseport) {
+ memory_region_del_subregion(&region->container,
+ &region->real_iomem);
+ memory_region_destroy(&region->real_iomem);
+ memory_region_destroy(&region->container);
+ }
} else if (pci_region->type & IORESOURCE_MEM) {
if (region->u.r_virtbase) {
memory_region_del_subregion(&region->container,