libxl: invert xc and domain model resume calls in xc_domain_resume()
authorCédric Bosdonnat <cbosdonnat@suse.com>
Mon, 28 Nov 2016 13:53:57 +0000 (14:53 +0100)
committerWei Liu <wei.liu2@citrix.com>
Wed, 7 Dec 2016 11:12:41 +0000 (11:12 +0000)
Resume is sometimes silently failing for HVM guests. Getting the
xc_domain_resume() and libxl__domain_resume_device_model() in the
reverse order than what is in the suspend code fixes the problem.

Signed-off-by: Cédric Bosdonnat <cbosdonnat@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
[ wei: rebase it on top of staging ]
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
tools/libxl/libxl_dom_suspend.c

index d258a1c8dc50d23d7f582de90bdc6b2300f2e68c..6314a001d1b6f1f6114b1aa7fcdd284cd12b7f11 100644 (file)
@@ -456,12 +456,6 @@ int libxl__domain_resume(libxl__gc *gc, uint32_t domid, int suspend_cancel)
 {
     int rc = 0;
 
-    if (xc_domain_resume(CTX->xch, domid, suspend_cancel)) {
-        LOGED(ERROR, domid, "xc_domain_resume failed");
-        rc = ERROR_FAIL;
-        goto out;
-    }
-
     libxl_domain_type type = libxl__domain_type(gc, domid);
     if (type == LIBXL_DOMAIN_TYPE_INVALID) {
         rc = ERROR_FAIL;
@@ -476,6 +470,12 @@ int libxl__domain_resume(libxl__gc *gc, uint32_t domid, int suspend_cancel)
         }
     }
 
+    if (xc_domain_resume(CTX->xch, domid, suspend_cancel)) {
+        LOGED(ERROR, domid, "xc_domain_resume failed");
+        rc = ERROR_FAIL;
+        goto out;
+    }
+
     if (!xs_resume_domain(CTX->xsh, domid)) {
         LOGED(ERROR, domid, "xs_resume_domain failed");
         rc = ERROR_FAIL;