s390x/pci: properly fail if the zPCI device cannot be created
PATCH v2 1/1 s390x/pci: properly fail if the zPCI device cannot be created
Right now, errors during realize()/pre_plug/plug of the zPCI device would result in QEMU crashing instead of failing nicely when creating a zPCI device for a PCI device.
Reviewed-by Thomas Huth <[email protected]>
Reviewed-by Collin Walling <[email protected]>
Signed-off-by David Hildenbrand <[email protected]>
---
v1 -> v2:
- Fix setting of "target" property (key and value was inverted)
hw/s390x/s390-pci-bus.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-)
hw/s390x/s390-pci-bus.c +19 -6
@@ -780,17 +780,31 @@ static void s390_pci_msix_free(S390PCIBusDevice *pbdev) }static S390PCIBusDevice *s390_pci_device_new (S390pciState *s, -const char *target) +const char *target,Error **errp) { -DeviceState *dev =NULL ; +Error *local_err =NULL ; +DeviceState *dev; dev =qdev_try_create (BUS (s->bus),TYPE_S390_PCI_DEVICE );if (!dev) { +error_setg (errp,"zPCI device could not be created" );return NULL ; } -qdev_prop_set_string (dev,"target" , target); -qdev_init_nofail (dev); +object_property_set_str (OBJECT (dev), target,"target" , &local_err); +if (local_err) { +object_unparent (OBJECT (dev)); +error_propagate_prepend (errp, local_err, +"zPCI device could not be created: " ); +return NULL ; + } +object_property_set_bool (OBJECT (dev), true,"realized" , &local_err); +if (local_err) { +object_unparent (OBJECT (dev)); +error_propagate_prepend (errp, local_err, +"zPCI device could not be created: " ); +return NULL ; + }return S390_PCI_DEVICE (dev); }
@@ -865,9 +879,8 @@ static void s390_pcihost_hot_plug(HotplugHandler *hotplug_dev, pbdev =s390_pci_find_dev_by_target (s, dev->id);if (!pbdev) { - pbdev =s390_pci_device_new (s, dev->id); + pbdev =s390_pci_device_new (s, dev->id, errp);if (!pbdev) { -error_setg (errp,"create zpci device failed" );return ; } }
Signature · 1 line
2.17.2
Quoted 7 lines · On Tue, 13 Nov 2018 13:17:10 +0100 David Hildenbrand <[email protected]> wrote:
Right now, errors during realize()/pre_plug/plug of the zPCI device would result in QEMU crashing instead of failing nicely when creating a zPCI device for a PCI device.
Reviewed-by Thomas Huth <[email protected]>Reviewed-by Collin Walling <[email protected]>Signed-off-by David Hildenbrand <[email protected]>
Quoted 7 lines
---
v1 -> v2:
- Fix setting of "target" property (key and value was inverted)hw/s390x/s390-pci-bus.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-)
Thanks, queued to s390-fixes.