From 9d6459316a5800a404c252d591e771a511e5a21f Mon Sep 17 00:00:00 2001 From: Alex Williamson Date: Tue, 6 Jul 2010 22:29:09 -0300 Subject: [PATCH 16/24] pci: Free the space allocated for the option rom on removal RH-Author: Alex Williamson Message-id: <20100706222909.1033.23629.stgit@localhost.localdomain> Patchwork-id: 10519 O-Subject: [RHEL6.0 qemu-kvm PATCH 16/17] pci: Free the space allocated for the option rom on removal Bugzilla: 596328 RH-Acked-by: Juan Quintela RH-Acked-by: Amit Shah RH-Acked-by: Jes Sorensen Bugzilla: 596328 Upstream commit: 230741dcc7c15573efe41ee88b7533e0c3c76f66 Signed-off-by: Alex Williamson Signed-off-by: Anthony Liguori --- hw/pci.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) Signed-off-by: Eduardo Habkost --- hw/pci.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 93be5d0..816844c 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -77,6 +77,7 @@ static struct BusInfo pci_bus_info = { static void pci_update_mappings(PCIDevice *d); static void pci_set_irq(void *opaque, int irq_num, int level); static int pci_add_option_rom(PCIDevice *pdev); +static void pci_del_option_rom(PCIDevice *pdev); target_phys_addr_t pci_mem_base; static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; @@ -733,6 +734,7 @@ static int pci_unregister_device(DeviceState *dev) return ret; pci_unregister_io_regions(pci_dev); + pci_del_option_rom(pci_dev); do_pci_unregister_device(pci_dev); return 0; } @@ -1667,6 +1669,15 @@ static int pci_add_option_rom(PCIDevice *pdev) return 0; } +static void pci_del_option_rom(PCIDevice *pdev) +{ + if (!pdev->rom_offset) + return; + + qemu_ram_free(pdev->rom_offset); + pdev->rom_offset = 0; +} + /* Reserve space and add capability to the linked list in pci config space */ int pci_add_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) { -- 1.7.0.3