From: Alex Williamson Date: Wed, 4 Jul 2012 04:39:34 +0000 (-0600) Subject: pci: Unregister BARs before device exit X-Git-Tag: v1.2.0-rc0~112^2^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7cf1b0fd95657e722b2ad290649eee88d1365786;p=thirdparty%2Fqemu.git pci: Unregister BARs before device exit 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 Signed-off-by: Michael S. Tsirkin --- diff --git a/hw/pci.c b/hw/pci.c index f783362ae33..ef7607e177c 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -838,12 +838,13 @@ static int pci_unregister_device(DeviceState *dev) 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; }