@@ -96,9 +96,15 @@ 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);
+ PCIBridgeDev *bridge_dev = PCI_BRIDGE_DEV(obj);
shpc_free(dev);
memory_region_destroy(&bridge_dev->bar);
- pci_bridge_exitfn(dev);
pci_bridge_free(dev);
}
@@ -159,6 +165,7 @@ static const TypeInfo pci_bridge_dev_info = {
.parent = TYPE_PCI_BRIDGE,
.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 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)