From: David Gibson <david@gibson.dropbear.id.au>
To: Greg Kurz <groug@kaod.org>
Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org,
qemu-s390x@nongnu.org, "Alexey Kardashevskiy" <aik@ozlabs.ru>,
"Cédric Le Goater" <clg@kaod.org>,
"Michael Roth" <mdroth@linux.vnet.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Marcel Apfelbaum" <marcel@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Dmitry Fleytman" <dmitry.fleytman@gmail.com>,
"Thomas Huth" <thuth@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 10/15] qdev: pass an Object * to qbus_set_hotplug_handler()
Date: Wed, 13 Feb 2019 14:59:04 +1100 [thread overview]
Message-ID: <20190213035904.GF1884@umbus.fritz.box> (raw)
In-Reply-To: <154999589921.690774.3640149277362188566.stgit@bahia.lan>
[-- Attachment #1: Type: text/plain, Size: 11463 bytes --]
On Tue, Feb 12, 2019 at 07:24:59PM +0100, Greg Kurz wrote:
> From: Michael Roth <mdroth@linux.vnet.ibm.com>
>
> Certain devices types, like memory/CPU, are now being handled using a
> hotplug interface provided by a top-level MachineClass. Hotpluggable
> host bridges are another such device where it makes sense to use a
> machine-level hotplug handler. However, unlike those devices,
> host-bridges have a parent bus (the main system bus), and devices with
> a parent bus use a different mechanism for registering their hotplug
> handlers: qbus_set_hotplug_handler(). This interface currently expects
> a handler to be a subclass of DeviceClass, but this is not the case
> for MachineClass, which derives directly from ObjectClass.
>
> Internally, the interface only requires an ObjectClass, so expose that
> in qbus_set_hotplug_handler().
>
> Cc: Michael S. Tsirkin <mst@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> Signed-off-by: Greg Kurz <groug@kaod.org>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> Acked-by: Halil Pasic <pasic@linux.ibm.com>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Applied to ppc-for-4.0, this will be useful for something I have in
mind as well.
> ---
> hw/acpi/pcihp.c | 2 +-
> hw/acpi/piix4.c | 2 +-
> hw/char/virtio-serial-bus.c | 2 +-
> hw/core/bus.c | 11 ++---------
> hw/pci/pcie.c | 2 +-
> hw/pci/shpc.c | 2 +-
> hw/ppc/spapr_pci.c | 2 +-
> hw/s390x/css-bridge.c | 2 +-
> hw/s390x/s390-pci-bus.c | 6 +++---
> hw/scsi/virtio-scsi.c | 2 +-
> hw/scsi/vmw_pvscsi.c | 2 +-
> hw/usb/dev-smartcard-reader.c | 2 +-
> include/hw/qdev-core.h | 3 +--
> 13 files changed, 16 insertions(+), 24 deletions(-)
>
> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
> index 7bc7a723407b..942918132376 100644
> --- a/hw/acpi/pcihp.c
> +++ b/hw/acpi/pcihp.c
> @@ -251,7 +251,7 @@ void acpi_pcihp_device_plug_cb(HotplugHandler *hotplug_dev, AcpiPciHpState *s,
> object_dynamic_cast(OBJECT(dev), TYPE_PCI_BRIDGE)) {
> PCIBus *sec = pci_bridge_get_sec_bus(PCI_BRIDGE(pdev));
>
> - qbus_set_hotplug_handler(BUS(sec), DEVICE(hotplug_dev),
> + qbus_set_hotplug_handler(BUS(sec), OBJECT(hotplug_dev),
> &error_abort);
> /* We don't have to overwrite any other hotplug handler yet */
> assert(QLIST_EMPTY(&sec->child));
> diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> index 88f9a9ec0912..df8c0db909ce 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -536,7 +536,7 @@ static void piix4_pm_realize(PCIDevice *dev, Error **errp)
>
> piix4_acpi_system_hot_add_init(pci_address_space_io(dev),
> pci_get_bus(dev), s);
> - qbus_set_hotplug_handler(BUS(pci_get_bus(dev)), DEVICE(s), &error_abort);
> + qbus_set_hotplug_handler(BUS(pci_get_bus(dev)), OBJECT(s), &error_abort);
>
> piix4_pm_add_propeties(s);
> }
> diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c
> index d76351d7487d..bdd917bbb83c 100644
> --- a/hw/char/virtio-serial-bus.c
> +++ b/hw/char/virtio-serial-bus.c
> @@ -1052,7 +1052,7 @@ static void virtio_serial_device_realize(DeviceState *dev, Error **errp)
> /* Spawn a new virtio-serial bus on which the ports will ride as devices */
> qbus_create_inplace(&vser->bus, sizeof(vser->bus), TYPE_VIRTIO_SERIAL_BUS,
> dev, vdev->bus_name);
> - qbus_set_hotplug_handler(BUS(&vser->bus), DEVICE(vser), errp);
> + qbus_set_hotplug_handler(BUS(&vser->bus), OBJECT(vser), errp);
> vser->bus.vser = vser;
> QTAILQ_INIT(&vser->ports);
>
> diff --git a/hw/core/bus.c b/hw/core/bus.c
> index 4651f244864c..e09843f6abea 100644
> --- a/hw/core/bus.c
> +++ b/hw/core/bus.c
> @@ -22,22 +22,15 @@
> #include "hw/qdev.h"
> #include "qapi/error.h"
>
> -static void qbus_set_hotplug_handler_internal(BusState *bus, Object *handler,
> - Error **errp)
> +void qbus_set_hotplug_handler(BusState *bus, Object *handler, Error **errp)
> {
> -
> object_property_set_link(OBJECT(bus), OBJECT(handler),
> QDEV_HOTPLUG_HANDLER_PROPERTY, errp);
> }
>
> -void qbus_set_hotplug_handler(BusState *bus, DeviceState *handler, Error **errp)
> -{
> - qbus_set_hotplug_handler_internal(bus, OBJECT(handler), errp);
> -}
> -
> void qbus_set_bus_hotplug_handler(BusState *bus, Error **errp)
> {
> - qbus_set_hotplug_handler_internal(bus, OBJECT(bus), errp);
> + qbus_set_hotplug_handler(bus, OBJECT(bus), errp);
> }
>
> int qbus_walk_children(BusState *bus,
> diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
> index 230478faab12..3f7c36609313 100644
> --- a/hw/pci/pcie.c
> +++ b/hw/pci/pcie.c
> @@ -543,7 +543,7 @@ void pcie_cap_slot_init(PCIDevice *dev, uint16_t slot)
> dev->exp.hpev_notified = false;
>
> qbus_set_hotplug_handler(BUS(pci_bridge_get_sec_bus(PCI_BRIDGE(dev))),
> - DEVICE(dev), NULL);
> + OBJECT(dev), NULL);
> }
>
> void pcie_cap_slot_reset(PCIDevice *dev)
> diff --git a/hw/pci/shpc.c b/hw/pci/shpc.c
> index 45053b39b92c..52ccdc5ae3b9 100644
> --- a/hw/pci/shpc.c
> +++ b/hw/pci/shpc.c
> @@ -648,7 +648,7 @@ int shpc_init(PCIDevice *d, PCIBus *sec_bus, MemoryRegion *bar,
> shpc_cap_update_dword(d);
> memory_region_add_subregion(bar, offset, &shpc->mmio);
>
> - qbus_set_hotplug_handler(BUS(sec_bus), DEVICE(d), NULL);
> + qbus_set_hotplug_handler(BUS(sec_bus), OBJECT(d), NULL);
>
> d->cap_present |= QEMU_PCI_CAP_SHPC;
> return 0;
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index e3781dd110b2..0d4bad7bbe73 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -1743,7 +1743,7 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
> &sphb->memspace, &sphb->iospace,
> PCI_DEVFN(0, 0), PCI_NUM_PINS, TYPE_PCI_BUS);
> phb->bus = bus;
> - qbus_set_hotplug_handler(BUS(phb->bus), DEVICE(sphb), NULL);
> + qbus_set_hotplug_handler(BUS(phb->bus), OBJECT(sphb), NULL);
>
> /*
> * Initialize PHB address space.
> diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c
> index 1bd6c8b45860..7573c40badbd 100644
> --- a/hw/s390x/css-bridge.c
> +++ b/hw/s390x/css-bridge.c
> @@ -108,7 +108,7 @@ VirtualCssBus *virtual_css_bus_init(void)
> cbus = VIRTUAL_CSS_BUS(bus);
>
> /* Enable hotplugging */
> - qbus_set_hotplug_handler(bus, dev, &error_abort);
> + qbus_set_hotplug_handler(bus, OBJECT(dev), &error_abort);
>
> css_register_io_adapters(CSS_IO_ADAPTER_VIRTIO, true, false,
> 0, &error_abort);
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 80ff1ce33f72..5998942b4c15 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -742,7 +742,7 @@ static void s390_pcihost_realize(DeviceState *dev, Error **errp)
> pci_setup_iommu(b, s390_pci_dma_iommu, s);
>
> bus = BUS(b);
> - qbus_set_hotplug_handler(bus, dev, &local_err);
> + qbus_set_hotplug_handler(bus, OBJECT(dev), &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> return;
> @@ -750,7 +750,7 @@ static void s390_pcihost_realize(DeviceState *dev, Error **errp)
> phb->bus = b;
>
> s->bus = S390_PCI_BUS(qbus_create(TYPE_S390_PCI_BUS, dev, NULL));
> - qbus_set_hotplug_handler(BUS(s->bus), dev, &local_err);
> + qbus_set_hotplug_handler(BUS(s->bus), OBJECT(dev), &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> return;
> @@ -912,7 +912,7 @@ static void s390_pcihost_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
> pci_bridge_map_irq(pb, dev->id, s390_pci_map_irq);
> pci_setup_iommu(&pb->sec_bus, s390_pci_dma_iommu, s);
>
> - qbus_set_hotplug_handler(BUS(&pb->sec_bus), DEVICE(s), errp);
> + qbus_set_hotplug_handler(BUS(&pb->sec_bus), OBJECT(s), errp);
>
> if (dev->hotplugged) {
> pci_default_write_config(pdev, PCI_PRIMARY_BUS,
> diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
> index eb90288f4741..ce99d288b035 100644
> --- a/hw/scsi/virtio-scsi.c
> +++ b/hw/scsi/virtio-scsi.c
> @@ -906,7 +906,7 @@ static void virtio_scsi_device_realize(DeviceState *dev, Error **errp)
> scsi_bus_new(&s->bus, sizeof(s->bus), dev,
> &virtio_scsi_scsi_info, vdev->bus_name);
> /* override default SCSI bus hotplug-handler, with virtio-scsi's one */
> - qbus_set_hotplug_handler(BUS(&s->bus), dev, &error_abort);
> + qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(dev), &error_abort);
>
> virtio_scsi_dataplane_setup(s, errp);
> }
> diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c
> index a3a019e30a74..584b4be07e79 100644
> --- a/hw/scsi/vmw_pvscsi.c
> +++ b/hw/scsi/vmw_pvscsi.c
> @@ -1142,7 +1142,7 @@ pvscsi_realizefn(PCIDevice *pci_dev, Error **errp)
> scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(pci_dev),
> &pvscsi_scsi_info, NULL);
> /* override default SCSI bus hotplug-handler, with pvscsi's one */
> - qbus_set_hotplug_handler(BUS(&s->bus), DEVICE(s), &error_abort);
> + qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(s), &error_abort);
> pvscsi_reset_state(s);
> }
>
> diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
> index 8f716fc165a3..6b0137bb7699 100644
> --- a/hw/usb/dev-smartcard-reader.c
> +++ b/hw/usb/dev-smartcard-reader.c
> @@ -1322,7 +1322,7 @@ static void ccid_realize(USBDevice *dev, Error **errp)
> usb_desc_init(dev);
> qbus_create_inplace(&s->bus, sizeof(s->bus), TYPE_CCID_BUS, DEVICE(dev),
> NULL);
> - qbus_set_hotplug_handler(BUS(&s->bus), DEVICE(dev), &error_abort);
> + qbus_set_hotplug_handler(BUS(&s->bus), OBJECT(dev), &error_abort);
> s->intr = usb_ep_get(dev, USB_TOKEN_IN, CCID_INT_IN_EP);
> s->bulk = usb_ep_get(dev, USB_TOKEN_IN, CCID_BULK_IN_EP);
> s->card = NULL;
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 0a84c427561c..e70a4bfa498f 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -430,8 +430,7 @@ char *qdev_get_dev_path(DeviceState *dev);
>
> GSList *qdev_build_hotpluggable_device_list(Object *peripheral);
>
> -void qbus_set_hotplug_handler(BusState *bus, DeviceState *handler,
> - Error **errp);
> +void qbus_set_hotplug_handler(BusState *bus, Object *handler, Error **errp);
>
> void qbus_set_bus_hotplug_handler(BusState *bus, Error **errp);
>
>
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2019-02-13 4:14 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-12 18:23 [Qemu-devel] [PATCH v4 00/15] spapr: Add support for PHB hotplug Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 01/15] spapr_irq: Add an @xics_offset field to sPAPRIrq Greg Kurz
2019-02-12 20:07 ` Cédric Le Goater
2019-02-13 3:26 ` David Gibson
2019-02-13 12:23 ` Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 02/15] xive: Only set source type for LSIs Greg Kurz
2019-02-13 3:27 ` David Gibson
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 03/15] spapr_irq: Set LSIs at interrupt controller init Greg Kurz
2019-02-12 20:17 ` Cédric Le Goater
2019-02-13 3:48 ` David Gibson
2019-02-13 12:44 ` Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 04/15] spapr: Expose the name of the interrupt controller node Greg Kurz
2019-02-13 3:50 ` David Gibson
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 05/15] spapr_irq: Expose the phandle of the interrupt controller Greg Kurz
2019-02-13 3:52 ` David Gibson
2019-02-13 13:11 ` Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 06/15] spapr_pci: add PHB unrealize Greg Kurz
2019-02-13 3:56 ` David Gibson
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 07/15] spapr: create DR connectors for PHBs Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 08/15] spapr: populate PHB DRC entries for root DT node Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 09/15] spapr_events: add support for phb hotplug events Greg Kurz
2019-02-12 18:24 ` [Qemu-devel] [PATCH v4 10/15] qdev: pass an Object * to qbus_set_hotplug_handler() Greg Kurz
2019-02-13 3:59 ` David Gibson [this message]
2019-02-12 18:25 ` [Qemu-devel] [PATCH v4 11/15] spapr_pci: provide node start offset via spapr_populate_pci_dt() Greg Kurz
2019-02-12 18:25 ` [Qemu-devel] [PATCH v4 12/15] spapr_pci: add ibm, my-drc-index property for PHB hotplug Greg Kurz
2019-02-12 18:25 ` [Qemu-devel] [PATCH v4 13/15] spapr_drc: Allow FDT fragment to be added later Greg Kurz
2019-02-13 4:05 ` David Gibson
2019-02-13 13:15 ` Greg Kurz
2019-02-12 18:25 ` [Qemu-devel] [PATCH v4 14/15] spapr: add hotplug hooks for PHB hotplug Greg Kurz
2019-02-13 4:13 ` David Gibson
2019-02-13 13:24 ` Greg Kurz
2019-02-13 9:25 ` David Hildenbrand
2019-02-13 13:25 ` Greg Kurz
2019-02-12 18:25 ` [Qemu-devel] [PATCH v4 15/15] spapr: enable PHB hotplug for default pseries machine type Greg Kurz
2019-02-13 4:13 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190213035904.GF1884@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=aik@ozlabs.ru \
--cc=clg@kaod.org \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=dmitry.fleytman@gmail.com \
--cc=ehabkost@redhat.com \
--cc=groug@kaod.org \
--cc=kraxel@redhat.com \
--cc=marcel@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.