From: Igor Mammedov <imammedo@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael S . Tsirkin" <mst@redhat.com>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
qemu-ppc@nongnu.org, Libvirt <libvir-list@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v1 2/7] pcihp: overwrite hotplug handler recursively from the start
Date: Thu, 1 Nov 2018 15:10:34 +0100 [thread overview]
Message-ID: <20181101151034.4eb1618c@redhat.com> (raw)
In-Reply-To: <20181024101930.20674-3-david@redhat.com>
On Wed, 24 Oct 2018 12:19:25 +0200
David Hildenbrand <david@redhat.com> wrote:
> For now, the hotplug handler is not called for devices that are
> being cold plugged. The hotplug handler is setup when the machine
> initialization is fully done. Only bridges that were cold plugged are
> considered.
>
> Set the hotplug handler for the root piix bus directly when realizing.
> Overwrite the hotplug handler of bridges when hotplugging/coldplugging
> them.
>
> This will now make sure that the ACPI PCI hotplug handler is also called
> for cold-plugged devices (also on bridges) and for bridges that were
> hotplugged.
>
> When trying to hotplug a device to a hotplugged bridge, we now correctly
> get the error message
> "Unsupported bus. Bus doesn't have property 'acpi-pcihp-bsel' set"
> Insted of going via the standard PCI hotplug handler.
Erroring out is probably not ok, since it can break existing setups
where SHPC hotplugging to hotplugged bridge was working just fine before.
Marcel/Michael what's your take on this change in behaviour?
CCing libvirt in case they are doing this stuff
>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
> hw/acpi/pcihp.c | 10 ++++++++++
> hw/acpi/piix4.c | 16 +---------------
> 2 files changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/hw/acpi/pcihp.c b/hw/acpi/pcihp.c
> index 5e7cef173c..647b5e8d82 100644
> --- a/hw/acpi/pcihp.c
> +++ b/hw/acpi/pcihp.c
> @@ -30,6 +30,7 @@
> #include "hw/hw.h"
> #include "hw/i386/pc.h"
> #include "hw/pci/pci.h"
> +#include "hw/pci/pci_bridge.h"
> #include "hw/acpi/acpi.h"
> #include "sysemu/sysemu.h"
> #include "exec/address-spaces.h"
> @@ -236,6 +237,15 @@ void acpi_pcihp_device_plug_cb(HotplugHandler *hotplug_dev, AcpiPciHpState *s,
> int slot = PCI_SLOT(pdev->devfn);
> int bsel;
>
> + if (!s->legacy_piix && object_dynamic_cast(OBJECT(dev), TYPE_PCI_BRIDGE)) {
> + PCIBus *sec = pci_bridge_get_sec_bus(PCI_BRIDGE(pdev));
> +
> + /* Overwrite the default hotplug handler with the ACPI PCI one. */
> + qbus_set_hotplug_handler(BUS(sec), DEVICE(hotplug_dev), &error_abort);
> + /* No need to do it recursively */
> + assert(QLIST_EMPTY(&sec->child));
> + }
> +
> /* Don't send event when device is enabled during qemu machine creation:
> * it is present on boot, no hotplug event is necessary. We do send an
> * event when the device is disabled later. */
> diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
> index 167afe2cea..e611778daf 100644
> --- a/hw/acpi/piix4.c
> +++ b/hw/acpi/piix4.c
> @@ -446,15 +446,6 @@ static void piix4_device_unplug_cb(HotplugHandler *hotplug_dev,
> }
> }
>
> -static void piix4_update_bus_hotplug(PCIBus *pci_bus, void *opaque)
> -{
> - PIIX4PMState *s = opaque;
> -
> - /* pci_bus cannot outlive PIIX4PMState, because /machine keeps it alive
> - * and it's not hot-unpluggable */
> - qbus_set_hotplug_handler(BUS(pci_bus), DEVICE(s), &error_abort);
> -}
> -
> static void piix4_pm_machine_ready(Notifier *n, void *opaque)
> {
> PIIX4PMState *s = container_of(n, PIIX4PMState, machine_ready);
> @@ -468,12 +459,6 @@ static void piix4_pm_machine_ready(Notifier *n, void *opaque)
> pci_conf[0x63] = 0x60;
> pci_conf[0x67] = (memory_region_present(io_as, 0x3f8) ? 0x08 : 0) |
> (memory_region_present(io_as, 0x2f8) ? 0x90 : 0);
> -
> - if (s->use_acpi_pci_hotplug) {
> - pci_for_each_bus(pci_get_bus(d), piix4_update_bus_hotplug, s);
> - } else {
> - piix4_update_bus_hotplug(pci_get_bus(d), s);
> - }
> }
>
> static void piix4_pm_add_propeties(PIIX4PMState *s)
> @@ -547,6 +532,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);
>
> piix4_pm_add_propeties(s);
> }
next prev parent reply other threads:[~2018-11-01 14:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-24 10:19 [Qemu-devel] [PATCH v1 0/7] pci: hotplug handler reworks David Hildenbrand
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 1/7] pcihp: perform check for bus capability in pre_plug handler David Hildenbrand
2018-11-01 14:11 ` Igor Mammedov
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 2/7] pcihp: overwrite hotplug handler recursively from the start David Hildenbrand
2018-11-01 14:10 ` Igor Mammedov [this message]
2018-11-02 11:43 ` David Hildenbrand
2018-11-02 13:00 ` Igor Mammedov
2018-11-02 13:34 ` David Hildenbrand
2018-11-02 16:28 ` Michael S. Tsirkin
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 3/7] pcihp: route unplug via the hotplug handler David Hildenbrand
2018-11-01 14:21 ` Igor Mammedov
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 4/7] pci/pcie: " David Hildenbrand
2018-11-01 14:38 ` Igor Mammedov
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 5/7] pci/shpc: move hotplug checks to preplug handler David Hildenbrand
2018-11-05 9:11 ` David Hildenbrand
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 6/7] pci/shpc: route unplug via the hotplug handler David Hildenbrand
2018-10-24 10:19 ` [Qemu-devel] [PATCH v1 7/7] spapr_pci: " David Hildenbrand
2018-10-24 12:50 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2018-10-31 17:31 ` [Qemu-devel] [PATCH v1 0/7] pci: hotplug handler reworks David Hildenbrand
2018-11-01 14:55 ` Igor Mammedov
2018-11-01 16:42 ` David Hildenbrand
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=20181101151034.4eb1618c@redhat.com \
--to=imammedo@redhat.com \
--cc=david@redhat.com \
--cc=libvir-list@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).