BARs are registered in init functions from memory regions created
by the drivers. Exit functions destroy those memory regions.
By unregistering the io regions after exit(), we're calling
memory_region_del_subregion on freed memory. Don't do that. The
option rom comes along for the ride because it's more symmetric
to how it's created.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
PCIDevice *pci_dev = PCI_DEVICE(dev);
PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(pci_dev);
+ pci_unregister_io_regions(pci_dev);
+ pci_del_option_rom(pci_dev);
+
if (pc->exit) {
pc->exit(pci_dev);
}
- pci_unregister_io_regions(pci_dev);
- pci_del_option_rom(pci_dev);
do_pci_unregister_device(pci_dev);
return 0;
}