From: Greg Kurz <groug@kaod.org>
To: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
qemu-ppc@nongnu.org,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
Igor Mammedov <imammedo@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH v1 7/7] spapr_pci: route unplug via the hotplug handler
Date: Wed, 24 Oct 2018 14:50:33 +0200 [thread overview]
Message-ID: <20181024145033.2ef8b8b8@bahia.lan> (raw)
In-Reply-To: <20181024101930.20674-8-david@redhat.com>
On Wed, 24 Oct 2018 12:19:30 +0200
David Hildenbrand <david@redhat.com> wrote:
> Preparation for multi-stage hotplug handlers.
>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
Reviewed-by: Greg Kurz <groug@kaod.org>
> hw/ppc/spapr_pci.c | 33 +++++++++++++++++++++------------
> 1 file changed, 21 insertions(+), 12 deletions(-)
>
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 58afa46204..64b8591023 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -1370,18 +1370,9 @@ static int spapr_create_pci_child_dt(sPAPRPHBState *phb, PCIDevice *dev,
> /* Callback to be called during DRC release. */
> void spapr_phb_remove_pci_device_cb(DeviceState *dev)
> {
> - /* some version guests do not wait for completion of a device
> - * cleanup (generally done asynchronously by the kernel) before
> - * signaling to QEMU that the device is safe, but instead sleep
> - * for some 'safe' period of time. unfortunately on a busy host
> - * this sleep isn't guaranteed to be long enough, resulting in
> - * bad things like IRQ lines being left asserted during final
> - * device removal. to deal with this we call reset just prior
> - * to finalizing the device, which will put the device back into
> - * an 'idle' state, as the device cleanup code expects.
> - */
> - pci_device_reset(PCI_DEVICE(dev));
> - object_unparent(OBJECT(dev));
> + HotplugHandler *hotplug_ctrl = qdev_get_hotplug_handler(dev);
> +
> + hotplug_handler_unplug(hotplug_ctrl, dev, &error_abort);
> }
>
> static sPAPRDRConnector *spapr_phb_get_pci_func_drc(sPAPRPHBState *phb,
> @@ -1490,6 +1481,23 @@ out:
> }
> }
>
> +static void spapr_pci_unplug(HotplugHandler *plug_handler,
> + DeviceState *plugged_dev, Error **errp)
> +{
> + /* some version guests do not wait for completion of a device
> + * cleanup (generally done asynchronously by the kernel) before
> + * signaling to QEMU that the device is safe, but instead sleep
> + * for some 'safe' period of time. unfortunately on a busy host
> + * this sleep isn't guaranteed to be long enough, resulting in
> + * bad things like IRQ lines being left asserted during final
> + * device removal. to deal with this we call reset just prior
> + * to finalizing the device, which will put the device back into
> + * an 'idle' state, as the device cleanup code expects.
> + */
> + pci_device_reset(PCI_DEVICE(plugged_dev));
> + object_unparent(OBJECT(plugged_dev));
> +}
> +
> static void spapr_pci_unplug_request(HotplugHandler *plug_handler,
> DeviceState *plugged_dev, Error **errp)
> {
> @@ -1965,6 +1973,7 @@ static void spapr_phb_class_init(ObjectClass *klass, void *data)
> dc->user_creatable = true;
> set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
> hp->plug = spapr_pci_plug;
> + hp->unplug = spapr_pci_unplug;
> hp->unplug_request = spapr_pci_unplug_request;
> }
>
next prev parent reply other threads:[~2018-10-24 12:51 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
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 ` Greg Kurz [this message]
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=20181024145033.2ef8b8b8@bahia.lan \
--to=groug@kaod.org \
--cc=david@gibson.dropbear.id.au \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@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).