s390 PCI currently disallows PCI devices without the MSI-X capability. However, this fence doesn't make sense for passthrough devices. Move the check to only fence emulated devices (e.g., virtio).
Signed-off-by: Matthew Rosato <mjros...@linux.ibm.com> Reviewed-by: Pierre Morel <pmo...@linux.ibm.com> --- hw/s390x/s390-pci-bus.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index dd138da..dc732e2 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -1028,12 +1028,12 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev, s390_pci_get_clp_info(pbdev); } else { pbdev->fh |= FH_SHM_EMUL; - } - if (s390_pci_msix_init(pbdev)) { - error_setg(errp, "MSI-X support is mandatory " - "in the S390 architecture"); - return; + if (s390_pci_msix_init(pbdev)) { + error_setg(errp, "MSI-X support is mandatory " + "in the S390 architecture"); + return; + } } if (dev->hotplugged) { @@ -1073,7 +1073,9 @@ static void s390_pcihost_unplug(HotplugHandler *hotplug_dev, DeviceState *dev, devfn = pci_dev->devfn; qdev_unrealize(dev); - s390_pci_msix_free(pbdev); + if (pbdev->fh & FH_SHM_EMUL) { + s390_pci_msix_free(pbdev); + } s390_pci_iommu_free(s, bus, devfn); pbdev->pdev = NULL; pbdev->state = ZPCI_FS_RESERVED; -- 1.8.3.1