All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>, Wei Liu <wl@xen.org>
Subject: [Xen-devel] [PATCH 01/35] libxl: Make libxl_domain_unpause async
Date: Fri, 2 Aug 2019 16:35:32 +0100	[thread overview]
Message-ID: <20190802153606.32061-2-anthony.perard@citrix.com> (raw)
In-Reply-To: <20190802153606.32061-1-anthony.perard@citrix.com>

libxl_domain_unpause needs to make QMP calls, which are asynchronous,
change the API to reflect that.

Do the same with libxl_domain_pause async, even if it will keep
completing synchronously.

Also fix some coding style issue in those functions.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 tools/libxl/libxl.h              | 26 +++++++++++++++--
 tools/libxl/libxl_colo_restore.c |  2 +-
 tools/libxl/libxl_colo_save.c    |  2 +-
 tools/libxl/libxl_dm.c           |  2 +-
 tools/libxl/libxl_domain.c       | 48 +++++++++++++++++++++-----------
 tools/libxl/libxl_internal.h     |  1 +
 tools/xl/xl_migrate.c            |  4 +--
 tools/xl/xl_saverestore.c        |  2 +-
 tools/xl/xl_vmcontrol.c          |  6 ++--
 9 files changed, 65 insertions(+), 28 deletions(-)

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index e40546c23a..7a31169611 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -619,7 +619,8 @@ typedef struct libxl__ctx libxl_ctx;
 /* API compatibility. */
 #ifdef LIBXL_API_VERSION
 #if LIBXL_API_VERSION != 0x040200 && LIBXL_API_VERSION != 0x040300 && \
-    LIBXL_API_VERSION != 0x040400 && LIBXL_API_VERSION != 0x040500
+    LIBXL_API_VERSION != 0x040400 && LIBXL_API_VERSION != 0x040500 && \
+    LIBXL_API_VERSION != 0x041300
 #error Unknown LIBXL_API_VERSION
 #endif
 #endif
@@ -1595,8 +1596,27 @@ int libxl_domain_rename(libxl_ctx *ctx, uint32_t domid,
    * transactionally that the domain has the old old name; if
    * trans is not 0 we use caller's transaction and caller must do retries */
 
-int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid);
-int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid);
+int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid,
+                       const libxl_asyncop_how *ao_how)
+                       LIBXL_EXTERNAL_CALLERS_ONLY;
+int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid,
+                         const libxl_asyncop_how *ao_how)
+                         LIBXL_EXTERNAL_CALLERS_ONLY;
+#if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION < 0x041300
+static inline int libxl_domain_pause_0x041200(
+    libxl_ctx *ctx, uint32_t domid)
+{
+    return libxl_domain_pause(ctx, domid, NULL);
+}
+static inline int libxl_domain_unpause_0x041200(
+    libxl_ctx *ctx, uint32_t domid)
+{
+    return libxl_domain_unpause(ctx, domid, NULL);
+}
+#define libxl_domain_pause libxl_domain_pause_0x041200
+#define libxl_domain_unpause libxl_domain_unpause_0x041200
+#endif
+
 
 int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid,
                            const char *filename,
diff --git a/tools/libxl/libxl_colo_restore.c b/tools/libxl/libxl_colo_restore.c
index 0c535bd95d..aaa70552b8 100644
--- a/tools/libxl/libxl_colo_restore.c
+++ b/tools/libxl/libxl_colo_restore.c
@@ -853,7 +853,7 @@ static void colo_unpause_svm(libxl__egc *egc,
     EGC_GC;
 
     /* We have enabled secondary vm's logdirty, so we can unpause it now */
-    rc = libxl_domain_unpause(CTX, domid);
+    rc = libxl__domain_unpause(gc, domid);
     if (rc) {
         LOGD(ERROR, domid, "cannot unpause secondary vm");
         goto out;
diff --git a/tools/libxl/libxl_colo_save.c b/tools/libxl/libxl_colo_save.c
index 3247cce3a7..1d261a1639 100644
--- a/tools/libxl/libxl_colo_save.c
+++ b/tools/libxl/libxl_colo_save.c
@@ -480,7 +480,7 @@ static void colo_preresume_cb(libxl__egc *egc,
      * no disk migration.
      */
     if (css->paused) {
-        rc = libxl_domain_unpause(CTX, dss->domid);
+        rc = libxl__domain_unpause(gc, dss->domid);
         if (rc) {
             LOGD(ERROR, dss->domid, "cannot unpause primary vm");
             goto out;
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 5fe25b56f5..00da59153d 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -2402,7 +2402,7 @@ static void stubdom_pvqemu_cb(libxl__egc *egc,
         goto out;
     }
 
-    rc = libxl_domain_unpause(CTX, dm_domid);
+    rc = libxl__domain_unpause(gc, dm_domid);
     if (rc) goto out;
 
     sdss->xswait.ao = ao;
diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c
index 11a29b235b..1c313005db 100644
--- a/tools/libxl/libxl_domain.c
+++ b/tools/libxl/libxl_domain.c
@@ -557,18 +557,18 @@ int libxl_domain_suspend_only(libxl_ctx *ctx, uint32_t domid,
     return AO_CREATE_FAIL(rc);
 }
 
-int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid)
+int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid,
+                       const libxl_asyncop_how *ao_how)
 {
-    int ret;
-    GC_INIT(ctx);
-    ret = xc_domain_pause(ctx->xch, domid);
-    if (ret<0) {
+    AO_CREATE(ctx, domid, ao_how);
+    int r;
+    r = xc_domain_pause(ctx->xch, domid);
+    if (r < 0) {
         LOGED(ERROR, domid, "Pausing domain");
-        GC_FREE;
-        return ERROR_FAIL;
+        return AO_CREATE_FAIL(ERROR_FAIL);
     }
-    GC_FREE;
-    return 0;
+    libxl__ao_complete(egc, ao, 0);
+    return AO_INPROGRESS;
 }
 
 int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid,
@@ -593,10 +593,9 @@ int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid,
     return AO_INPROGRESS;
 }
 
-int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid)
+int libxl__domain_unpause(libxl__gc *gc, libxl_domid domid)
 {
-    GC_INIT(ctx);
-    int ret, rc = 0;
+    int r, rc;
 
     libxl_domain_type type = libxl__domain_type(gc, domid);
     if (type == LIBXL_DOMAIN_TYPE_INVALID) {
@@ -612,16 +611,33 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid)
             goto out;
         }
     }
-    ret = xc_domain_unpause(ctx->xch, domid);
-    if (ret<0) {
+    r = xc_domain_unpause(CTX->xch, domid);
+    if (r < 0) {
         LOGED(ERROR, domid, "Unpausing domain");
         rc = ERROR_FAIL;
+        goto out;
     }
- out:
-    GC_FREE;
+    rc = 0;
+out:
     return rc;
 }
 
+int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid,
+                         const libxl_asyncop_how *ao_how)
+{
+    AO_CREATE(ctx, domid, ao_how);
+    int rc = 0;
+
+    rc = libxl__domain_unpause(gc, domid);
+    if (rc) goto out;
+
+    libxl__ao_complete(egc, ao, rc);
+    return AO_INPROGRESS;
+
+ out:
+    return AO_CREATE_FAIL(rc);
+}
+
 int libxl__domain_pvcontrol_available(libxl__gc *gc, uint32_t domid)
 {
     libxl_ctx *ctx = libxl__gc_owner(gc);
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index cf9287c488..7bd08032cf 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -4108,6 +4108,7 @@ _hidden void libxl__remus_teardown(libxl__egc *egc,
                                    int rc);
 _hidden void libxl__remus_restore_setup(libxl__egc *egc,
                                         libxl__domain_create_state *dcs);
+_hidden int libxl__domain_unpause(libxl__gc *, libxl_domid domid);
 
 
 /*
diff --git a/tools/xl/xl_migrate.c b/tools/xl/xl_migrate.c
index 1f0e87df50..22f0429b84 100644
--- a/tools/xl/xl_migrate.c
+++ b/tools/xl/xl_migrate.c
@@ -394,7 +394,7 @@ static void migrate_receive(int debug, int daemonize, int monitor,
             /* The guest is running after failover in COLO mode */
             exit(rc ? -ERROR_FAIL: 0);
 
-        rc = libxl_domain_unpause(ctx, domid);
+        rc = libxl_domain_unpause(ctx, domid, NULL);
         if (rc)
             fprintf(stderr, "migration target (%s): "
                     "Failed to unpause domain %s (id: %u):%d\n",
@@ -429,7 +429,7 @@ static void migrate_receive(int debug, int daemonize, int monitor,
     }
 
     if (!pause_after_migration) {
-        rc = libxl_domain_unpause(ctx, domid);
+        rc = libxl_domain_unpause(ctx, domid, NULL);
         if (rc) goto perhaps_destroy_notify_rc;
     }
 
diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c
index 9afeadeeb2..5c70e2e874 100644
--- a/tools/xl/xl_saverestore.c
+++ b/tools/xl/xl_saverestore.c
@@ -150,7 +150,7 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint,
     }
     else if (leavepaused || checkpoint) {
         if (leavepaused)
-            libxl_domain_pause(ctx, domid);
+            libxl_domain_pause(ctx, domid, NULL);
         libxl_domain_resume(ctx, domid, 1, 0);
     }
     else
diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c
index a1d633795c..419bf780a4 100644
--- a/tools/xl/xl_vmcontrol.c
+++ b/tools/xl/xl_vmcontrol.c
@@ -34,12 +34,12 @@ static int fd_lock = -1;
 
 static void pause_domain(uint32_t domid)
 {
-    libxl_domain_pause(ctx, domid);
+    libxl_domain_pause(ctx, domid, NULL);
 }
 
 static void unpause_domain(uint32_t domid)
 {
-    libxl_domain_unpause(ctx, domid);
+    libxl_domain_unpause(ctx, domid, NULL);
 }
 
 static void destroy_domain(uint32_t domid, int force)
@@ -972,7 +972,7 @@ int create_domain(struct domain_create *dom_info)
     }
 
     if (!paused)
-        libxl_domain_unpause(ctx, domid);
+        libxl_domain_unpause(ctx, domid, NULL);
 
     ret = domid; /* caller gets success in parent */
     if (!daemonize && !monitor)
-- 
Anthony PERARD


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2019-08-02 15:36 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-02 15:35 [Xen-devel] [PATCH 00/35] libxl refactoring to use ev_qmp (with API changes) Anthony PERARD
2019-08-02 15:35 ` Anthony PERARD [this message]
2019-09-17 16:50   ` [Xen-devel] [PATCH 01/35] libxl: Make libxl_domain_unpause async Ian Jackson
2019-09-18 14:05     ` Anthony PERARD
2019-09-18 15:44       ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 02/35] libxl: Make libxl_send_trigger async Anthony PERARD
2019-09-17 16:50   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 03/35] libxl: Make libxl_set_vcpuonline async Anthony PERARD
2019-09-17 16:50   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 04/35] libxl: Make libxl_retrieve_domain_configuration async Anthony PERARD
2019-09-17 16:50   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 05/35] libxl: Make libxl_qemu_monitor_command async Anthony PERARD
2019-09-17 16:50   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 06/35] libxl: Use ev_qmp for switch_qemu_xen_logdirty Anthony PERARD
2019-09-17 16:52   ` Ian Jackson
2019-09-17 16:53     ` Ian Jackson
2019-09-17 17:10     ` Ian Jackson
2019-09-19 12:58     ` Anthony PERARD
2019-09-19 13:03       ` Ian Jackson
2019-09-19 13:21         ` Anthony PERARD
2019-08-02 15:35 ` [Xen-devel] [PATCH 07/35] libxl: Move "qmp_initializations" to libxl_dm Anthony PERARD
2019-09-17 16:54   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 08/35] libxl: Replace libxl__qmp_initializations by ev_qmp calls Anthony PERARD
2019-09-17 17:02   ` Ian Jackson
2019-09-18 14:20     ` Anthony PERARD
2019-09-18 16:49     ` Anthony PERARD
2019-09-18 16:56       ` Ian Jackson
2019-09-18 17:08   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 09/35] libxl: Deprecate libxl__domain_{unpause, resume} Anthony PERARD
2019-09-17 17:02   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 10/35] libxl: Re-introduce libxl__domain_resume Anthony PERARD
2019-09-17 17:04   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 11/35] libxl_domain: Convert libxl_domain_resume to use libxl__domain_resume Anthony PERARD
2019-09-17 17:04   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 12/35] libxl: Re-introduce libxl__domain_unpause Anthony PERARD
2019-09-17 17:05   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 13/35] libxl_dm: Update libxl__spawn_stub_dm to use libxl__domain_unpause Anthony PERARD
2019-09-17 17:05   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 14/35] libxl_domain: Convert libxl_domain_unpause " Anthony PERARD
2019-09-17 17:05   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 15/35] libxl: Inline do_usbdev_add into libxl__device_usbdev_add Anthony PERARD
2019-09-17 17:05   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 16/35] libxl: Inline do_usbdev_remove into libxl__device_usbdev_remove Anthony PERARD
2019-09-17 17:06   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 17/35] libxl: Add libxl__ev_qmp to libxl__ao_device Anthony PERARD
2019-09-17 17:07   ` Ian Jackson
2019-09-19 15:43     ` Anthony PERARD
2019-09-19 16:17       ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 18/35] libxl: Add device_{config, type} " Anthony PERARD
2019-09-17 17:07   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 19/35] libxl_usb: Make libxl__device_usbctrl_add uses ev_qmp Anthony PERARD
2019-09-17 17:08   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 20/35] libxl_usb: Make libxl__initiate_device_usbctrl_remove " Anthony PERARD
2019-09-17 17:10   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 21/35] libxl_usb: Make libxl__device_usbdev_add " Anthony PERARD
2019-09-17 17:10   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 22/35] libxl: Use aodev for libxl__device_usbdev_remove Anthony PERARD
2019-09-17 17:12   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 23/35] libxl: libxl__initiate_device_usbdev_remove now use ev_qmp Anthony PERARD
2019-09-17 17:14   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 24/35] libxl: Remove libxl__qmp_run_command_flexarray Anthony PERARD
2019-09-17 17:14   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 25/35] libxl_pci: Coding style of do_pci_add Anthony PERARD
2019-09-17 17:15   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 26/35] libxl_pci: Only check if qemu-dm is running in qemu-trad case Anthony PERARD
2019-09-17 17:16   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 27/35] libxl_pci: Use libxl__ao_device with libxl__device_pci_add Anthony PERARD
2019-09-17 17:16   ` Ian Jackson
2019-08-02 15:35 ` [Xen-devel] [PATCH 28/35] libxl_pci: Use ev_qmp in do_pci_add Anthony PERARD
2019-09-17 17:19   ` Ian Jackson
2019-09-18 14:23     ` Anthony PERARD
2019-09-18 17:22       ` Anthony PERARD
2019-09-19 11:18   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 29/35] libxl_pci: Use libxl__ao_device with pci_remove Anthony PERARD
2019-09-17 17:20   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 30/35] libxl_pci: Use ev_qmp for pci_remove Anthony PERARD
2019-09-17 17:27   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 31/35] libxl: Use ev_qmp for libxl_send_trigger Anthony PERARD
2019-09-17 17:27   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 32/35] libxl: Use ev_qmp in libxl_set_vcpuonline Anthony PERARD
2019-09-17 17:41   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 33/35] libxl: Extract qmp_parse_query_cpus Anthony PERARD
2019-09-17 17:42   ` Ian Jackson
2019-09-19 14:46     ` Anthony PERARD
2019-09-19 16:17       ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 34/35] libxl: libxl_retrieve_domain_configuration now uses ev_qmp Anthony PERARD
2019-09-17 17:43   ` Ian Jackson
2019-08-02 15:36 ` [Xen-devel] [PATCH 35/35] libxl: libxl_qemu_monitor_command " Anthony PERARD
2019-09-17 17:43   ` Ian Jackson
2019-09-17 17:44 ` [Xen-devel] [PATCH 00/35] libxl refactoring to use ev_qmp (with API changes) Ian Jackson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190802153606.32061-2-anthony.perard@citrix.com \
    --to=anthony.perard@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.