Message ID | 1386282785-466-15-git-send-email-mdroth@linux.vnet.ibm.com |
---|---|
State | New |
Headers | show |
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 --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;