From: Jes Sorensen<address@hidden>
pc-0.11 and older uses fw_cfg to provide option ROMs. As fw_cfg is setup
at init time, it is not possible to load an option ROM for a hotplug
device when running in compat mode.
v2: Alex Williamson pointed out that one can get to qdev directly from
pci_dev, so no need to pass it down.
v3: Braces
Signed-off-by: Jes Sorensen<address@hidden>
---
hw/pci.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/hw/pci.c b/hw/pci.c
index a98d6f3..a20f796 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -1810,11 +1810,16 @@ static int pci_add_option_rom(PCIDevice *pdev)
return 0;
if (!pdev->rom_bar) {
+ int class;
/*
* Load rom via fw_cfg instead of creating a rom bar,
- * for 0.11 compatibility.
+ * for 0.11 compatibility. fw_cfg is initialized at boot, so
+ * we cannot do hotplug load of option roms.
*/
- int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);
+ if (pdev->qdev.hotplugged) {
+ return 0;
+ }
+ class = pci_get_word(pdev->config + PCI_CLASS_DEVICE);
if (class == 0x0300) {
rom_add_vga(pdev->romfile);
} else {