diff mbox

[v2,14/14] spapr_pci: emit hotplug add/remove events during hotplug

Message ID 1386282785-466-15-git-send-email-mdroth@linux.vnet.ibm.com
State New
Headers show

Commit Message

Michael Roth Dec. 5, 2013, 10:33 p.m. UTC
From: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>

This uses extension of existing EPOW interrupt/event mechanism
to notify userspace tools like librtas/drmgr to handle
in-guest configuration/cleanup operations in response to
device_add/device_del.

Userspace tools that don't implement this extension will need
to be run manually in response/advance of device_add/device_del,
respectively.

Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 hw/ppc/spapr_pci.c |    4 ++++
 1 file changed, 4 insertions(+)

Comments

Alexey Kardashevskiy Dec. 16, 2013, 5:06 a.m. UTC | #1
On 12/06/2013 09:33 AM, Michael Roth wrote:
> From: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
> 
> This uses extension of existing EPOW interrupt/event mechanism
> to notify userspace tools like librtas/drmgr to handle
> in-guest configuration/cleanup operations in response to
> device_add/device_del.
> 
> Userspace tools that don't implement this extension will need
> to be run manually in response/advance of device_add/device_del,
> respectively.
> 
> Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr_pci.c |    4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 9b4f829..9821462 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -1129,14 +1129,18 @@ static void spapr_device_hotplug_remove(DeviceState *qdev, PCIDevice *dev)
>  static int spapr_device_hotplug(DeviceState *qdev, PCIDevice *dev,
>                                  PCIHotplugState state)
>  {

sPAPRPHBState *phb = SPAPR_PCI_HOST_BRIDGE(qdev);

> +    int slot = PCI_SLOT(dev->devfn);
> +
>      if (state == PCI_COLDPLUG_ENABLED) {
>          return 0;
>      }
>  
>      if (state == PCI_HOTPLUG_ENABLED) {
>          spapr_device_hotplug_add(qdev, dev);
> +        spapr_pci_hotplug_add_event(qdev, slot);

	spapr_pci_hotplug_add_event(phb->buid, slot);

>      } else {
>          spapr_device_hotplug_remove(qdev, dev);
> +        spapr_pci_hotplug_remove_event(qdev, slot);

	spapr_pci_hotplug_remove_event(phb->buid, slot);

and fix spapr_pci_hotplug_(add|remove)_event to receive @buid instead of
qdev/phb. Or we could even remove these helpers and call
spapr_hotplug_req_event() directly. Would not that make things easier to read?



>      }
>  
>      return 0;
>
diff mbox

Patch

diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index 9b4f829..9821462 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -1129,14 +1129,18 @@  static void spapr_device_hotplug_remove(DeviceState *qdev, PCIDevice *dev)
 static int spapr_device_hotplug(DeviceState *qdev, PCIDevice *dev,
                                 PCIHotplugState state)
 {
+    int slot = PCI_SLOT(dev->devfn);
+
     if (state == PCI_COLDPLUG_ENABLED) {
         return 0;
     }
 
     if (state == PCI_HOTPLUG_ENABLED) {
         spapr_device_hotplug_add(qdev, dev);
+        spapr_pci_hotplug_add_event(qdev, slot);
     } else {
         spapr_device_hotplug_remove(qdev, dev);
+        spapr_pci_hotplug_remove_event(qdev, slot);
     }
 
     return 0;