[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH v2 10/10] spapr_pci: perform unplug via the hotplu
From: |
David Gibson |
Subject: |
Re: [Qemu-ppc] [PATCH v2 10/10] spapr_pci: perform unplug via the hotplug handler |
Date: |
Wed, 7 Nov 2018 15:22:12 +1100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Mon, Nov 05, 2018 at 11:20:44AM +0100, David Hildenbrand wrote:
> Introduce and use the "unplug" callback.
>
> This is a preparation for multi-stage hotplug handlers, whereby the bus
> hotplug handler is overwritten by the machine hotplug handler. This handler
> will then pass control to the bus hotplug handler. So to get this running
> cleanly, we also have to make sure to go via the hotplug handler chain when
> actually unplugging a device after an unplug request. Lookup the hotplug
> handler and call "unplug".
>
> Signed-off-by: David Hildenbrand <address@hidden>
Acked-by: David Gibson <address@hidden>
> ---
> 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;
> }
>
--
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
signature.asc
Description: PGP signature
[Qemu-ppc] [PATCH v2 10/10] spapr_pci: perform unplug via the hotplug handler, David Hildenbrand, 2018/11/05
[Qemu-ppc] [PATCH v2 08/10] pci/pcie: perform unplug via the hotplug handler, David Hildenbrand, 2018/11/05
[Qemu-ppc] [PATCH v2 04/10] pci/pcie: stop plug/unplug if the slot is locked, David Hildenbrand, 2018/11/05
[Qemu-ppc] [PATCH v2 02/10] pci/shpc: rename hotplug handler callbacks, David Hildenbrand, 2018/11/05