s390x/pci: Check for multifunction after device realization
The SR-IOV PFs set the multifunction bit during device realization so check them after that. There is no functional change because we explicitly ignore the multifunction bit for SR-IOV devices. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Message-Id: <20250116-reuse-v20-5-7cb370606368@daynix.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
d966250e93
commit
2c968f4653
@ -971,21 +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);
|
||||
|
||||
/*
|
||||
* Multifunction is not supported due to the lack of CLP. However,
|
||||
* do not check for multifunction capability for SR-IOV devices because
|
||||
* SR-IOV devices automatically add the multifunction capability whether
|
||||
* the user intends to use the functions other than the PF.
|
||||
*/
|
||||
if (pdev->cap_present & QEMU_PCI_CAP_MULTIFUNCTION &&
|
||||
!pdev->exp.sriov_cap) {
|
||||
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)) {
|
||||
@ -1076,6 +1062,18 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
||||
} else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
|
||||
pdev = PCI_DEVICE(dev);
|
||||
|
||||
/*
|
||||
* Multifunction is not supported due to the lack of CLP. However,
|
||||
* do not check for multifunction capability for SR-IOV devices because
|
||||
* SR-IOV devices automatically add the multifunction capability whether
|
||||
* the user intends to use the functions other than the PF.
|
||||
*/
|
||||
if (pdev->cap_present & QEMU_PCI_CAP_MULTIFUNCTION &&
|
||||
!pdev->exp.sriov_cap) {
|
||||
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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user