@@ -90,9 +90,16 @@ static void pci_bridge_dev_exitfn(PCIDevice *dev)
}
slotid_cap_cleanup(dev);
shpc_cleanup(dev, &bridge_dev->bar);
+ pci_bridge_exitfn(dev);
+}
+
+static void pci_bridge_dev_instance_finalize(Object *obj)
+{
+ PCIDevice *dev = PCI_DEVICE(obj);
+ PCIBridge *br = DO_UPCAST(PCIBridge, dev, dev);
+ PCIBridgeDev *bridge_dev = DO_UPCAST(PCIBridgeDev, bridge, br);
shpc_free(dev);
memory_region_destroy(&bridge_dev->bar);
- pci_bridge_exitfn(dev);
pci_bridge_free(dev);
}
@@ -152,6 +159,7 @@ static const TypeInfo pci_bridge_dev_info = {
.parent = TYPE_PCI_DEVICE,
.instance_size = sizeof(PCIBridgeDev),
.class_init = pci_bridge_dev_class_init,
+ .instance_finalize = pci_bridge_dev_instance_finalize,
};
static void pci_bridge_dev_register(void)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- hw/pci-bridge/pci_bridge_dev.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)