On Wed, Jun 17, 2026 at 06:06:40PM +0800, Tomita Moeko wrote: > Allow external code (e.g., VFIO IGD passthrough) to request PCI ID > patching for a custom romfile, replacing the existing is_default_rom > flag for this purpose. > > Reported-by: K S Maan <[email protected]> > Signed-off-by: Tomita Moeko <[email protected]>
Acked-by: Michael S. Tsirkin <[email protected]> > --- > hw/pci/pci.c | 14 ++++++-------- > include/hw/pci/pci_device.h | 1 + > 2 files changed, 7 insertions(+), 8 deletions(-) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 8e7872523a..b4235834a0 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -352,7 +352,7 @@ static const TypeInfo cxl_bus_info = { > > static void pci_update_mappings(PCIDevice *d); > static void pci_irq_handler(void *opaque, int irq_num, int level); > -static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom, Error > **); > +static void pci_add_option_rom(PCIDevice *pdev, Error **); > static void pci_del_option_rom(PCIDevice *pdev); > > static uint16_t pci_default_sub_vendor_id = PCI_SUBVENDOR_ID_REDHAT_QUMRANET; > @@ -2257,7 +2257,6 @@ static void pci_qdev_realize(DeviceState *qdev, Error > **errp) > PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(pci_dev); > ObjectClass *klass = OBJECT_CLASS(pc); > Error *local_err = NULL; > - bool is_default_rom; > uint16_t class_id; > > /* > @@ -2370,13 +2369,13 @@ static void pci_qdev_realize(DeviceState *qdev, Error > **errp) > } > > /* rom loading */ > - is_default_rom = false; > if (pci_dev->romfile == NULL && pc->romfile != NULL) { > + /* using a built-in default rom */ > pci_dev->romfile = g_strdup(pc->romfile); > - is_default_rom = true; > + pci_dev->rom_need_patch_id = true; > } > > - pci_add_option_rom(pci_dev, is_default_rom, &local_err); > + pci_add_option_rom(pci_dev, &local_err); > if (local_err) { > error_propagate(errp, local_err); > pci_qdev_unrealize(DEVICE(pci_dev)); > @@ -2555,8 +2554,7 @@ static void pci_patch_ids(PCIDevice *pdev, uint8_t > *ptr, uint32_t size) > } > > /* Add an option rom for the device */ > -static void pci_add_option_rom(PCIDevice *pdev, bool is_default_rom, > - Error **errp) > +static void pci_add_option_rom(PCIDevice *pdev, Error **errp) > { > int64_t size = 0; > g_autofree char *path = NULL; > @@ -2654,7 +2652,7 @@ static void pci_add_option_rom(PCIDevice *pdev, bool > is_default_rom, > return; > } > > - if (is_default_rom) { > + if (pdev->rom_need_patch_id) { > /* Only the default rom images will be patched (if needed). */ > pci_patch_ids(pdev, ptr, size); > } > diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h > index 5cac6e1688..8b9b6470e9 100644 > --- a/include/hw/pci/pci_device.h > +++ b/include/hw/pci/pci_device.h > @@ -157,6 +157,7 @@ struct PCIDevice { > char *romfile; > uint32_t romsize; > bool has_rom; > + bool rom_need_patch_id; > MemoryRegion rom; > int32_t rom_bar; > > -- > 2.53.0
