qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
	David Hildenbrand <david@redhat.com>,
	David Gibson <david@gibson.dropbear.id.au>,
	Igor Mammedov <imammedo@redhat.com>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Subject: [Qemu-devel] [PULL v3 37/44] pci/pcie: perform unplug via the hotplug handler
Date: Thu, 20 Dec 2018 13:40:04 -0500	[thread overview]
Message-ID: <20181220183059.20726-38-mst@redhat.com> (raw)
In-Reply-To: <20181220183059.20726-1-mst@redhat.com>

From: David Hildenbrand <david@redhat.com>

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".

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/pci/pcie.h |  2 ++
 hw/pci/pcie.c         | 10 +++++++++-
 hw/pci/pcie_port.c    |  1 +
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h
index d51ca23f07..cd318646a2 100644
--- a/include/hw/pci/pcie.h
+++ b/include/hw/pci/pcie.h
@@ -134,6 +134,8 @@ void pcie_ats_init(PCIDevice *dev, uint16_t offset);
 
 void pcie_cap_slot_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
                            Error **errp);
+void pcie_cap_slot_unplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
+                             Error **errp);
 void pcie_cap_slot_unplug_request_cb(HotplugHandler *hotplug_dev,
                                      DeviceState *dev, Error **errp);
 #endif /* QEMU_PCIE_H */
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index ec3b1145f3..2d3d8a047b 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -442,11 +442,19 @@ void pcie_cap_slot_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
     }
 }
 
-static void pcie_unplug_device(PCIBus *bus, PCIDevice *dev, void *opaque)
+void pcie_cap_slot_unplug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
+                             Error **errp)
 {
     object_unparent(OBJECT(dev));
 }
 
+static void pcie_unplug_device(PCIBus *bus, PCIDevice *dev, void *opaque)
+{
+    HotplugHandler *hotplug_ctrl = qdev_get_hotplug_handler(DEVICE(dev));
+
+    hotplug_handler_unplug(hotplug_ctrl, DEVICE(dev), &error_abort);
+}
+
 void pcie_cap_slot_unplug_request_cb(HotplugHandler *hotplug_dev,
                                      DeviceState *dev, Error **errp)
 {
diff --git a/hw/pci/pcie_port.c b/hw/pci/pcie_port.c
index 73e81e5847..bc07abc31b 100644
--- a/hw/pci/pcie_port.c
+++ b/hw/pci/pcie_port.c
@@ -155,6 +155,7 @@ static void pcie_slot_class_init(ObjectClass *oc, void *data)
 
     dc->props = pcie_slot_props;
     hc->plug = pcie_cap_slot_plug_cb;
+    hc->unplug = pcie_cap_slot_unplug_cb;
     hc->unplug_request = pcie_cap_slot_unplug_request_cb;
 }
 
-- 
MST

  parent reply	other threads:[~2018-12-20 18:40 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-20 18:37 [Qemu-devel] [PULL v3 00/44] pci, pc, virtio: fixes, features Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 01/44] pcie: set link state inactive/active after hot unplug/plug Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 02/44] pc:piix4: Update smbus I/O space after a migration Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 03/44] virtio: Helper for registering virtio device types Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 04/44] virtio: Provide version-specific variants of virtio PCI devices Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 05/44] tests: Remove unused include Michael S. Tsirkin
2018-12-20 18:37 ` [Qemu-devel] [PULL v3 06/44] hw/smbios: Restrict access to "hw/smbios/ipmi.h" Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 07/44] hw/smbios: Remove "smbios_ipmi.h" Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 08/44] hw/smbios: Move to the hw/firmware/ subdirectory Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 09/44] hw/pci-bridge: Fix invalid free() Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 10/44] pcie: Create enums for link speed and width Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 11/44] pci: Sync PCIe downstream port LNKSTA on read Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 12/44] qapi: Define PCIe link speed and width properties Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 13/44] pcie: Add link speed and width fields to PCIESlot Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 14/44] pcie: Fill PCIESlot link fields to support higher speeds and widths Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 15/44] pcie: Allow generic PCIe root port to specify link speed and width Michael S. Tsirkin
2018-12-20 18:38 ` [Qemu-devel] [PULL v3 16/44] vfio/pci: Remove PCIe Link Status emulation Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 17/44] pcie: Fast PCIe root ports for new machines Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 18/44] intel_iommu: dump correct iova when failed Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 19/44] intel_iommu: convert invalid traces into error reports Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 20/44] intel_iommu: dma read/write draining support Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 21/44] intel_iommu: remove "x-" prefix for "aw-bits" Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 22/44] hw: acpi: The RSDP build API can return void Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 23/44] hw: arm: acpi: Fix incorrect checksums in RSDP Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 24/44] hw: i386: Use correct RSDT length for checksum Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 25/44] hw: arm: Carry RSDP specific data through AcpiRsdpData Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 26/44] hw: arm: Convert the RSDP build to the buid_append_foo() API Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 27/44] hw: arm: Support both legacy and current RSDP build Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 28/44] hw: acpi: Export and share the ARM " Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 29/44] hw: acpi: Remove AcpiRsdpDescriptor and fix tests Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 30/44] hw/i386: Remove deprecated machines pc-0.10 and pc-0.11 Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 31/44] pci/pcie: rename hotplug handler callbacks Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 32/44] pci/shpc: " Michael S. Tsirkin
2018-12-20 18:39 ` [Qemu-devel] [PULL v3 33/44] s390x/pci: " Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 34/44] pci/pcihp: perform check for bus capability in pre_plug handler Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 35/44] pci/pcihp: overwrite hotplug handler recursively from the start Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 36/44] pci/pcihp: perform unplug via the hotplug handler Michael S. Tsirkin
2018-12-20 18:40 ` Michael S. Tsirkin [this message]
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 38/44] pci: Reuse pci-bridge hotplug handler handlers for pcie-pci-bridge Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 39/44] pci/shpc: perform unplug via the hotplug handler Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 40/44] spapr_pci: " Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 41/44] pci: Adjust PCI config limit based on bus topology Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 42/44] q35: set split kernel irqchip as default Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 43/44] x86-iommu: switch intr_supported to OnOffAuto type Michael S. Tsirkin
2018-12-20 18:40 ` [Qemu-devel] [PULL v3 44/44] x86-iommu: turn on IR by default if proper Michael S. Tsirkin
2018-12-21 15:49 ` [Qemu-devel] [PULL v3 00/44] pci, pc, virtio: fixes, features Peter Maydell
2018-12-26  4:41 ` no-reply

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=20181220183059.20726-38-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=david@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@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).