@@ -1518,7 +1518,7 @@ static int pci_qdev_init(DeviceState *qdev)
return 0;
}
-static int pci_unplug_device(DeviceState *qdev)
+static int pci_unplug_device_common(DeviceState *qdev, PCIHotplugState state)
{
PCIDevice *dev = PCI_DEVICE(qdev);
PCIDeviceClass *pc = PCI_DEVICE_GET_CLASS(dev);
@@ -1529,7 +1529,17 @@ static int pci_unplug_device(DeviceState *qdev)
}
object_unparent(OBJECT(dev));
return dev->bus->hotplug(dev->bus->hotplug_qdev, dev,
- PCI_HOTPLUG_DISABLED);
+ state);
+}
+
+static int pci_unplug_device(DeviceState *qdev)
+{
+ return pci_unplug_device_common(qdev, PCI_HOTPLUG_DISABLED);
+}
+
+static int pci_force_unplug_device(DeviceState *qdev)
+{
+ return pci_unplug_device_common(qdev, PCI_FORCE_EJECT);
}
PCIDevice *pci_create_multifunction(PCIBus *bus, int devfn, bool multifunction,
@@ -2000,6 +2010,7 @@ static void pci_device_class_init(ObjectClass *klass, void *data)
DeviceClass *k = DEVICE_CLASS(klass);
k->init = pci_qdev_init;
k->unplug = pci_unplug_device;
+ k->force_unplug = pci_force_unplug_device;
k->exit = pci_unregister_device;
k->bus_info = &pci_bus_info;
}
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- hw/pci.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-)