qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] hw/pci/pci: Fix slot check for plugged devices


From: Julia Suvorova
Subject: [PATCH v2] hw/pci/pci: Fix slot check for plugged devices
Date: Tue, 6 Oct 2020 14:59:08 +0200

If devfn is assigned automatically, 'else' clauses will never be
executed. And if it does not matter for the reserved and available
devfn, because we have already checked it, the check for function0
needs to be done again.

Steps to reproduce:
1. Run QEMU with:
        -M q35 \
        -device pcie-root-port,id=rp,.. \
        -device pci-device,bus=rp
2. Add a new device to the same port:
        device_add pci-device,bus=rp

The last command will add the device to slot 1 instead of
failing with "PCI: slot 0 function 0 already occupied..."

Signed-off-by: Julia Suvorova <jusual@redhat.com>
---
v2:
    * add example to the commit message [Michael]

 hw/pci/pci.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index de0fae10ab..ae132b0b52 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -1034,8 +1034,9 @@ static PCIDevice *do_pci_register_device(PCIDevice 
*pci_dev,
                    PCI_SLOT(devfn), PCI_FUNC(devfn), name,
                    bus->devices[devfn]->name);
         return NULL;
-    } else if (dev->hotplugged &&
-               pci_get_function_0(pci_dev)) {
+    };
+
+    if (dev->hotplugged && pci_get_function_0(pci_dev)) {
         error_setg(errp, "PCI: slot %d function 0 already ocuppied by %s,"
                    " new func %s cannot be exposed to guest.",
                    PCI_SLOT(pci_get_function_0(pci_dev)->devfn),
-- 
2.25.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]