mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
![]() When the devfn is already assigned in the command line, the
do_pci_register_device() may verify if the function 0 is already occupied.
However, when devfn < 0, the verification is skipped because it is part of
the last "else if".
For instance, suppose there is already a device at addr=00.00 of a port.
-device pcie-root-port,bus=pcie.0,chassis=115,id=port01,addr=0e.00 \
-device virtio-net-pci,bus=port01,id=vnet01,addr=00.00 \
When 'addr' is specified for the 2nd device, the hotplug is denied.
(qemu) device_add virtio-net-pci,bus=port01,id=vnet02,addr=01.00
Error: PCI: slot 0 function 0 already occupied by virtio-net-pci, new func virtio-net-pci cannot be exposed to guest.
When 'addr' is automatically assigned, the hotplug is not denied. This is
because the verification is skipped.
(qemu) device_add virtio-net-pci,bus=port01,id=vnet02
warning: PCI: slot 1 is not valid for virtio-net-pci, parent device only allows plugging into slot 0.
Fix the issue by moving the verification into an independent 'if'
statement.
Fixes:
|
||
---|---|---|
.. | ||
Kconfig | ||
meson.build | ||
msi.c | ||
msix.c | ||
pci-hmp-cmds.c | ||
pci-internal.h | ||
pci-qmp-cmds.c | ||
pci-stub.c | ||
pci.c | ||
pci_bridge.c | ||
pci_host.c | ||
pcie.c | ||
pcie_aer.c | ||
pcie_doe.c | ||
pcie_host.c | ||
pcie_port.c | ||
pcie_sriov.c | ||
shpc.c | ||
slotid_cap.c | ||
trace-events | ||
trace.h |