Message ID | 20240220-reuse-v6-12-2e42a28b0cf2@daynix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/pci: SR-IOV related fixes and improvements | expand |
Akihiko Odaki <akihiko.odaki@daynix.com> writes: > Currently there is no way to distinguish the case that rombar is > explicitly specified as 1 and the case that rombar is not specified. > > Set rombar -1 by default to distinguish these cases just as it is done > for addr and romsize. It was confirmed that changing the default value > to -1 will not change the behavior by looking at occurences of rom_bar. > > $ git grep -w rom_bar > hw/display/qxl.c:328: QXLRom *rom = memory_region_get_ram_ptr(&d->rom_bar); > hw/display/qxl.c:431: qxl_set_dirty(&qxl->rom_bar, 0, qxl->rom_size); > hw/display/qxl.c:1048: QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); > hw/display/qxl.c:2131: memory_region_init_rom(&qxl->rom_bar, OBJECT(qxl), "qxl.vrom", > hw/display/qxl.c:2154: PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->rom_bar); > hw/display/qxl.h:101: MemoryRegion rom_bar; > hw/pci/pci.c:74: DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), > hw/pci/pci.c:2329: if (!pdev->rom_bar) { > hw/vfio/pci.c:1019: if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { > hw/xen/xen_pt_load_rom.c:29: if (dev->romfile || !dev->rom_bar) { > include/hw/pci/pci_device.h:150: uint32_t rom_bar; > > rom_bar refers to a different variable in qxl. It is only tested if > the value is 0 or not in the other places. Makes me wonder why it's uint32_t. Not this patch's problem. > Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> > --- > hw/pci/pci.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 54b375da2d26..909c5b3ee4ee 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -71,7 +71,7 @@ static Property pci_props[] = { > DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), > DEFINE_PROP_STRING("romfile", PCIDevice, romfile), > DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, -1), > - DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), > + DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, -1), > DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present, > QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false), > DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present,
On 2024/02/21 16:59, Markus Armbruster wrote: > Akihiko Odaki <akihiko.odaki@daynix.com> writes: > >> Currently there is no way to distinguish the case that rombar is >> explicitly specified as 1 and the case that rombar is not specified. >> >> Set rombar -1 by default to distinguish these cases just as it is done >> for addr and romsize. It was confirmed that changing the default value >> to -1 will not change the behavior by looking at occurences of rom_bar. >> >> $ git grep -w rom_bar >> hw/display/qxl.c:328: QXLRom *rom = memory_region_get_ram_ptr(&d->rom_bar); >> hw/display/qxl.c:431: qxl_set_dirty(&qxl->rom_bar, 0, qxl->rom_size); >> hw/display/qxl.c:1048: QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); >> hw/display/qxl.c:2131: memory_region_init_rom(&qxl->rom_bar, OBJECT(qxl), "qxl.vrom", >> hw/display/qxl.c:2154: PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->rom_bar); >> hw/display/qxl.h:101: MemoryRegion rom_bar; >> hw/pci/pci.c:74: DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), >> hw/pci/pci.c:2329: if (!pdev->rom_bar) { >> hw/vfio/pci.c:1019: if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { >> hw/xen/xen_pt_load_rom.c:29: if (dev->romfile || !dev->rom_bar) { >> include/hw/pci/pci_device.h:150: uint32_t rom_bar; >> >> rom_bar refers to a different variable in qxl. It is only tested if >> the value is 0 or not in the other places. > > Makes me wonder why it's uint32_t. Not this patch's problem. Indeed. It should have been OnOffAuto. I'm not changing it now though because I'm too worried if it is too disruptive. > >> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> >> --- >> hw/pci/pci.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/hw/pci/pci.c b/hw/pci/pci.c >> index 54b375da2d26..909c5b3ee4ee 100644 >> --- a/hw/pci/pci.c >> +++ b/hw/pci/pci.c >> @@ -71,7 +71,7 @@ static Property pci_props[] = { >> DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), >> DEFINE_PROP_STRING("romfile", PCIDevice, romfile), >> DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, -1), >> - DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), >> + DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, -1), >> DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present, >> QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false), >> DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present, >
diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 54b375da2d26..909c5b3ee4ee 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -71,7 +71,7 @@ static Property pci_props[] = { DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), DEFINE_PROP_STRING("romfile", PCIDevice, romfile), DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, -1), - DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), + DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, -1), DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present, QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false), DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present,
Currently there is no way to distinguish the case that rombar is explicitly specified as 1 and the case that rombar is not specified. Set rombar -1 by default to distinguish these cases just as it is done for addr and romsize. It was confirmed that changing the default value to -1 will not change the behavior by looking at occurences of rom_bar. $ git grep -w rom_bar hw/display/qxl.c:328: QXLRom *rom = memory_region_get_ram_ptr(&d->rom_bar); hw/display/qxl.c:431: qxl_set_dirty(&qxl->rom_bar, 0, qxl->rom_size); hw/display/qxl.c:1048: QXLRom *rom = memory_region_get_ram_ptr(&qxl->rom_bar); hw/display/qxl.c:2131: memory_region_init_rom(&qxl->rom_bar, OBJECT(qxl), "qxl.vrom", hw/display/qxl.c:2154: PCI_BASE_ADDRESS_SPACE_MEMORY, &qxl->rom_bar); hw/display/qxl.h:101: MemoryRegion rom_bar; hw/pci/pci.c:74: DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1), hw/pci/pci.c:2329: if (!pdev->rom_bar) { hw/vfio/pci.c:1019: if (vdev->pdev.romfile || !vdev->pdev.rom_bar) { hw/xen/xen_pt_load_rom.c:29: if (dev->romfile || !dev->rom_bar) { include/hw/pci/pci_device.h:150: uint32_t rom_bar; rom_bar refers to a different variable in qxl. It is only tested if the value is 0 or not in the other places. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> --- hw/pci/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)