From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:56834) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SUJiE-0006th-Ch for qemu-devel@nongnu.org; Tue, 15 May 2012 11:31:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SUJhQ-0006QW-Q8 for qemu-devel@nongnu.org; Tue, 15 May 2012 11:30:57 -0400 Received: from smtp02.citrix.com ([66.165.176.63]:48387) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SUJhQ-0006Ng-Iz for qemu-devel@nongnu.org; Tue, 15 May 2012 11:30:08 -0400 From: Anthony PERARD Date: Tue, 15 May 2012 16:26:38 +0100 Message-ID: <1337095599-28836-4-git-send-email-anthony.perard@citrix.com> In-Reply-To: <1337095599-28836-1-git-send-email-anthony.perard@citrix.com> References: <1337095599-28836-1-git-send-email-anthony.perard@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH 3/4] pci: Add force_unplug callback. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU-devel Cc: Anthony PERARD , Stefano Stabellini , "Michael S. Tsirkin" , Anthony Liguori , Xen Devel Signed-off-by: Anthony PERARD --- hw/pci.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index b706e69..c58bbc1 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -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; } -- Anthony PERARD