mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
hw/pci: Use -1 as the default value for rombar
vfio_pci_size_rom() distinguishes whether rombar is explicitly set to 1 by checking dev->opts, bypassing the QOM property infrastructure. Use -1 as the default value for rombar to tell if the user explicitly set it to 1. The property is also converted from unsigned to signed. -1 is signed so it is safe to give it a new meaning. The values in [2 ^ 31, 2 ^ 32) become invalid, but nobody should have typed these values by chance. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20250104-reuse-v18-13-c349eafd8673@daynix.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
3f8bcbba3b
commit
a7a3784128
3 changed files with 4 additions and 5 deletions
|
@ -85,7 +85,7 @@ static const Property pci_props[] = {
|
||||||
DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
|
DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1),
|
||||||
DEFINE_PROP_STRING("romfile", PCIDevice, romfile),
|
DEFINE_PROP_STRING("romfile", PCIDevice, romfile),
|
||||||
DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, UINT32_MAX),
|
DEFINE_PROP_UINT32("romsize", PCIDevice, romsize, UINT32_MAX),
|
||||||
DEFINE_PROP_UINT32("rombar", PCIDevice, rom_bar, 1),
|
DEFINE_PROP_INT32("rombar", PCIDevice, rom_bar, -1),
|
||||||
DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present,
|
DEFINE_PROP_BIT("multifunction", PCIDevice, cap_present,
|
||||||
QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false),
|
QEMU_PCI_CAP_MULTIFUNCTION_BITNR, false),
|
||||||
DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present,
|
DEFINE_PROP_BIT("x-pcie-lnksta-dllla", PCIDevice, cap_present,
|
||||||
|
|
|
@ -1012,7 +1012,6 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev)
|
||||||
{
|
{
|
||||||
uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK);
|
uint32_t orig, size = cpu_to_le32((uint32_t)PCI_ROM_ADDRESS_MASK);
|
||||||
off_t offset = vdev->config_offset + PCI_ROM_ADDRESS;
|
off_t offset = vdev->config_offset + PCI_ROM_ADDRESS;
|
||||||
DeviceState *dev = DEVICE(vdev);
|
|
||||||
char *name;
|
char *name;
|
||||||
int fd = vdev->vbasedev.fd;
|
int fd = vdev->vbasedev.fd;
|
||||||
|
|
||||||
|
@ -1046,12 +1045,12 @@ static void vfio_pci_size_rom(VFIOPCIDevice *vdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vfio_opt_rom_in_denylist(vdev)) {
|
if (vfio_opt_rom_in_denylist(vdev)) {
|
||||||
if (dev->opts && qdict_haskey(dev->opts, "rombar")) {
|
if (vdev->pdev.rom_bar > 0) {
|
||||||
warn_report("Device at %s is known to cause system instability"
|
warn_report("Device at %s is known to cause system instability"
|
||||||
" issues during option rom execution",
|
" issues during option rom execution",
|
||||||
vdev->vbasedev.name);
|
vdev->vbasedev.name);
|
||||||
error_printf("Proceeding anyway since user specified"
|
error_printf("Proceeding anyway since user specified"
|
||||||
" non zero value for rombar\n");
|
" positive value for rombar\n");
|
||||||
} else {
|
} else {
|
||||||
warn_report("Rom loading for device at %s has been disabled"
|
warn_report("Rom loading for device at %s has been disabled"
|
||||||
" due to system instability issues",
|
" due to system instability issues",
|
||||||
|
|
|
@ -148,7 +148,7 @@ struct PCIDevice {
|
||||||
uint32_t romsize;
|
uint32_t romsize;
|
||||||
bool has_rom;
|
bool has_rom;
|
||||||
MemoryRegion rom;
|
MemoryRegion rom;
|
||||||
uint32_t rom_bar;
|
int32_t rom_bar;
|
||||||
|
|
||||||
/* INTx routing notifier */
|
/* INTx routing notifier */
|
||||||
PCIINTxRoutingNotifier intx_routing_notifier;
|
PCIINTxRoutingNotifier intx_routing_notifier;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue