Commit 99ba777e authored by Markus Armbruster's avatar Markus Armbruster
Browse files

qdev: Convert uses of qdev_set_parent_bus() with Coccinelle



In addition to the qdev_create() patterns converted so far, we have a
qdev_set_parent_bus() pattern.  Mostly when we embed a device in a
parent device rather than allocating it on the heap.

This pattern also puts devices in the dangerous "no QOM parent, but
plugged into bus" state I explained in recent commit "qdev: New
qdev_new(), qdev_realize(), etc."

Apply same solution: convert to qdev_realize().  Coccinelle script:

    @@
    expression dev, bus, errp;
    symbol true;
    @@
    -    qdev_set_parent_bus(DEVICE(dev), bus);
         ...
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize(DEVICE(dev), bus, errp);

    @ depends on !(file in "qdev-monitor.c") && !(file in "hw/core/qdev.c")@
    expression dev, bus, errp;
    symbol true;
    @@
    -    qdev_set_parent_bus(dev, bus);
         ...
    -    object_property_set_bool(OBJECT(dev), true, "realized", errp);
    +    qdev_realize(dev, bus, errp);

    @@
    expression dev, bus;
    symbol true;
    @@
    -    qdev_set_parent_bus(DEVICE(dev), bus);
         ...
    -    qdev_init_nofail(DEVICE(dev));
    +    qdev_realize(DEVICE(dev), bus, &error_fatal);

Unconverted uses of qdev_set_parent_bus() remain.  They'll be
converted later in this series.

Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200610053247.1583243-12-armbru@redhat.com>
[Also convert new hw/virtio/vhost-user-vsock-pci.c]
parent df707969
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -33,9 +33,8 @@ static void virtio_gpu_pci_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
    int i;
    Error *local_error = NULL;

    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
    virtio_pci_force_virtio_1(vpci_dev);
    object_property_set_bool(OBJECT(vdev), true, "realized", &local_error);
    qdev_realize(vdev, BUS(&vpci_dev->bus), &local_error);

    if (local_error) {
        error_propagate(errp, local_error);
+1 −2
Original line number Diff line number Diff line
@@ -137,9 +137,8 @@ static void virtio_vga_base_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
    vpci_dev->common.offset = offset;

    /* init virtio bits */
    qdev_set_parent_bus(DEVICE(g), BUS(&vpci_dev->bus));
    virtio_pci_force_virtio_1(vpci_dev);
    object_property_set_bool(OBJECT(g), true, "realized", &err);
    qdev_realize(DEVICE(g), BUS(&vpci_dev->bus), &err);
    if (err) {
        error_propagate(errp, err);
        return;
+1 −2
Original line number Diff line number Diff line
@@ -1549,8 +1549,7 @@ static void amdvi_realize(DeviceState *dev, Error **errp)

    /* This device should take care of IOMMU PCI properties */
    x86_iommu->type = TYPE_AMD;
    qdev_set_parent_bus(DEVICE(&s->pci), &bus->qbus);
    object_property_set_bool(OBJECT(&s->pci), true, "realized", errp);
    qdev_realize(DEVICE(&s->pci), &bus->qbus, errp);
    ret = pci_add_capability(&s->pci.dev, AMDVI_CAPAB_ID_SEC, 0,
                                         AMDVI_CAPAB_SIZE, errp);
    if (ret < 0) {
+1 −2
Original line number Diff line number Diff line
@@ -182,9 +182,8 @@ static void piix4_realize(PCIDevice *dev, Error **errp)
    i8257_dma_init(isa_bus, 0);

    /* RTC */
    qdev_set_parent_bus(DEVICE(&s->rtc), BUS(isa_bus));
    qdev_prop_set_int32(DEVICE(&s->rtc), "base_year", 2000);
    object_property_set_bool(OBJECT(&s->rtc), true, "realized", &err);
    qdev_realize(DEVICE(&s->rtc), BUS(isa_bus), &err);
    if (err) {
        error_propagate(errp, err);
        return;
+2 −5
Original line number Diff line number Diff line
@@ -356,9 +356,7 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
        object_property_set_link(OBJECT(&s->pmu), OBJECT(sysbus_dev), "gpio",
                                 &error_abort);
        qdev_prop_set_bit(DEVICE(&s->pmu), "has-adb", ns->has_adb);
        qdev_set_parent_bus(DEVICE(&s->pmu), BUS(&s->macio_bus));

        object_property_set_bool(OBJECT(&s->pmu), true, "realized", &err);
        qdev_realize(DEVICE(&s->pmu), BUS(&s->macio_bus), &err);
        if (err) {
            error_propagate(errp, err);
            return;
@@ -374,11 +372,10 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
        /* CUDA */
        object_initialize_child(OBJECT(s), "cuda", &s->cuda, sizeof(s->cuda),
                                TYPE_CUDA, &error_abort, NULL);
        qdev_set_parent_bus(DEVICE(&s->cuda), BUS(&s->macio_bus));
        qdev_prop_set_uint64(DEVICE(&s->cuda), "timebase-frequency",
                             s->frequency);

        object_property_set_bool(OBJECT(&s->cuda), true, "realized", &err);
        qdev_realize(DEVICE(&s->cuda), BUS(&s->macio_bus), &err);
        if (err) {
            error_propagate(errp, err);
            return;
Loading