reset PCI devices on force removal even when QEMU returns error
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Fri, 28 Nov 2014 16:53:09 +0000 (16:53 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 6 Jan 2015 11:15:45 +0000 (11:15 +0000)
On do_pci_remove when QEMU returns error, we just bail out early without
resetting the device. On domain shutdown we are racing with QEMU exiting
and most often QEMU closes the QMP connection before executing the
requested command.

In these cases if force=1, it makes sense to go ahead with rest of the
PCI device removal, that includes resetting the device and calling
xc_deassign_device. Otherwise we risk not resetting the device properly
on domain shutdown.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
tools/libxl/libxl_pci.c

index 9ae37fa313c7bd5923cb9bd15c46d3152e532e5a..f3ae1329ff6e3a755b51bc494376a8f41afdf986 100644 (file)
@@ -1243,7 +1243,7 @@ static int do_pci_remove(libxl__gc *gc, uint32_t domid,
             rc = ERROR_INVAL;
             goto out_fail;
         }
-        if (rc) {
+        if (rc && !force) {
             rc = ERROR_FAIL;
             goto out_fail;
         }