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");
|
"this device");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
|
if (object_dynamic_cast(OBJECT(dev), TYPE_S390_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)) {
|
|
||||||
S390PCIBusDevice *pbdev = S390_PCI_DEVICE(dev);
|
S390PCIBusDevice *pbdev = S390_PCI_DEVICE(dev);
|
||||||
|
|
||||||
if (!s390_pci_alloc_idx(s, pbdev)) {
|
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)) {
|
} else if (object_dynamic_cast(OBJECT(dev), TYPE_PCI_DEVICE)) {
|
||||||
pdev = PCI_DEVICE(dev);
|
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) {
|
if (!dev->id) {
|
||||||
/* In the case the PCI device does not define an id */
|
/* In the case the PCI device does not define an id */
|
||||||
/* we generate one based on the PCI address */
|
/* we generate one based on the PCI address */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user