On 8/23/24 07:00, Akihiko Odaki wrote:
The SR-IOV PFs set the multifunction bits during device realization so
check them after that. This forbids adding SR-IOV devices to s390x.

Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com>

May be add :

Fixes: 6069bcdeacee ("s390x/pci: Move some hotplug checks to the pre_plug 
handler")

?

Anyhow,

Tested-by: Cédric Le Goater <c...@redhat.com>
Reviewed-by: Cédric Le Goater <c...@redhat.com>

Thanks,

C.


---
  hw/s390x/s390-pci-bus.c | 14 ++++++--------
  1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 3e57d5faca18..00b2c1f6157b 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -971,14 +971,7 @@ static void s390_pcihost_pre_plug(HotplugHandler 
*hotplug_dev, DeviceState *dev,
                      "this device");
      }
- if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
-        PCIDevice *pdev = PCI_DEVICE(dev);
-
-        if (pdev->cap_present & QEMU_PCI_CAP_MULTIFUNCTION) {
-            error_setg(errp, "multifunction not supported in s390");
-            return;
-        }
-    } else if (object_dynamic_cast(OBJECT(dev), TYPE_S390_PCI_DEVICE)) {
+    if (object_dynamic_cast(OBJECT(dev), TYPE_S390_PCI_DEVICE)) {
          S390PCIBusDevice *pbdev = S390_PCI_DEVICE(dev);
if (!s390_pci_alloc_idx(s, pbdev)) {
@@ -1069,6 +1062,11 @@ static void s390_pcihost_plug(HotplugHandler 
*hotplug_dev, DeviceState *dev,
      } else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
          pdev = PCI_DEVICE(dev);
+ if (pdev->cap_present & QEMU_PCI_CAP_MULTIFUNCTION) {
+            error_setg(errp, "multifunction not supported in s390");
+            return;
+        }
+
          if (!dev->id) {
              /* In the case the PCI device does not define an id */
              /* we generate one based on the PCI address         */



Reply via email to