s390x/pci: Avoid creating zpci for VFs
VFs are automatically created by PF, and creating zpci for them will result in unexpected usage of fids. Currently QEMU does not support multifunction for s390x so we don't need zpci for VFs anyway. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Message-Id: <20250116-reuse-v20-3-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
3bc31441ba
commit
b77a2778d9
@ -1080,6 +1080,16 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
|||||||
|
|
||||||
pbdev = s390_pci_find_dev_by_target(s, dev->id);
|
pbdev = s390_pci_find_dev_by_target(s, dev->id);
|
||||||
if (!pbdev) {
|
if (!pbdev) {
|
||||||
|
/*
|
||||||
|
* VFs are automatically created by PF, and creating zpci for them
|
||||||
|
* will result in unexpected usage of fids. Currently QEMU does not
|
||||||
|
* support multifunction for s390x so we don't need zpci for VFs
|
||||||
|
* anyway.
|
||||||
|
*/
|
||||||
|
if (pci_is_vf(pdev)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pbdev = s390_pci_device_new(s, dev->id, errp);
|
pbdev = s390_pci_device_new(s, dev->id, errp);
|
||||||
if (!pbdev) {
|
if (!pbdev) {
|
||||||
return;
|
return;
|
||||||
@ -1167,7 +1177,10 @@ static void s390_pcihost_unplug(HotplugHandler *hotplug_dev, DeviceState *dev,
|
|||||||
int32_t devfn;
|
int32_t devfn;
|
||||||
|
|
||||||
pbdev = s390_pci_find_dev_by_pci(s, PCI_DEVICE(dev));
|
pbdev = s390_pci_find_dev_by_pci(s, PCI_DEVICE(dev));
|
||||||
g_assert(pbdev);
|
if (!pbdev) {
|
||||||
|
g_assert(pci_is_vf(pci_dev));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
s390_pci_generate_plug_event(HP_EVENT_STANDBY_TO_RESERVED,
|
s390_pci_generate_plug_event(HP_EVENT_STANDBY_TO_RESERVED,
|
||||||
pbdev->fh, pbdev->fid);
|
pbdev->fh, pbdev->fid);
|
||||||
@ -1206,7 +1219,11 @@ static void s390_pcihost_unplug_request(HotplugHandler *hotplug_dev,
|
|||||||
* we've checked the PCI device already (to prevent endless recursion).
|
* we've checked the PCI device already (to prevent endless recursion).
|
||||||
*/
|
*/
|
||||||
pbdev = s390_pci_find_dev_by_pci(s, PCI_DEVICE(dev));
|
pbdev = s390_pci_find_dev_by_pci(s, PCI_DEVICE(dev));
|
||||||
g_assert(pbdev);
|
if (!pbdev) {
|
||||||
|
g_assert(pci_is_vf(PCI_DEVICE(dev)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pbdev->pci_unplug_request_processed = true;
|
pbdev->pci_unplug_request_processed = true;
|
||||||
qdev_unplug(DEVICE(pbdev), errp);
|
qdev_unplug(DEVICE(pbdev), errp);
|
||||||
} else if (object_dynamic_cast(OBJECT(dev), TYPE_S390_PCI_DEVICE)) {
|
} else if (object_dynamic_cast(OBJECT(dev), TYPE_S390_PCI_DEVICE)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user