|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 04/35] libxl: Make libxl_retrieve_domain_configuration async
.. because it makes QMP calls which are going to be async.
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
tools/libxl/libxl.h | 13 ++++++++++++-
tools/libxl/libxl_domain.c | 14 +++++++-------
tools/xl/xl_info.c | 3 ++-
tools/xl/xl_saverestore.c | 3 ++-
tools/xl/xl_vmcontrol.c | 3 ++-
5 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index fd69e92166b8..fd1e1349bf6a 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -1221,6 +1221,7 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, const
libxl_mac *src);
* libxl_domain_unpause()
* libxl_send_trigger()
* libxl_set_vcpuonline()
+ * libxl_retrieve_domain_configuration()
*/
#define LIBXL_HAVE_FN_USING_QMP_ASYNC 1
@@ -1564,8 +1565,18 @@ void libxl_domain_config_dispose(libxl_domain_config
*d_config);
* works with DomU.
*/
int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
- libxl_domain_config *d_config)
+ libxl_domain_config *d_config,
+ const libxl_asyncop_how *ao_how)
LIBXL_EXTERNAL_CALLERS_ONLY;
+#if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION < 0x041300
+static inline int libxl_retrieve_domain_configuration_0x041200(
+ libxl_ctx *ctx, uint32_t domid, libxl_domain_config *d_config)
+{
+ return libxl_retrieve_domain_configuration(ctx, domid, d_config, NULL);
+}
+#define libxl_retrieve_domain_configuration \
+ libxl_retrieve_domain_configuration_0x041200
+#endif
int libxl_domain_suspend(libxl_ctx *ctx, uint32_t domid, int fd,
int flags, /* LIBXL_SUSPEND_* */
diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c
index 60c3f7a34b4c..f2d5c86427ad 100644
--- a/tools/libxl/libxl_domain.c
+++ b/tools/libxl/libxl_domain.c
@@ -1594,14 +1594,13 @@ static int libxl__update_avail_vcpus_xenstore(libxl__gc
*gc, uint32_t domid,
}
int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
- libxl_domain_config *d_config)
+ libxl_domain_config *d_config,
+ const libxl_asyncop_how *ao_how)
{
- GC_INIT(ctx);
+ AO_CREATE(ctx, domid, ao_how);
int rc;
libxl__domain_userdata_lock *lock = NULL;
- CTX_LOCK;
-
lock = libxl__lock_domain_userdata(gc, domid);
if (!lock) {
rc = ERROR_LOCK_FAIL;
@@ -1808,9 +1807,10 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx,
uint32_t domid,
out:
if (lock) libxl__unlock_domain_userdata(lock);
- CTX_UNLOCK;
- GC_FREE;
- return rc;
+ if (rc)
+ return AO_CREATE_FAIL(rc);
+ libxl__ao_complete(egc, ao, rc);
+ return AO_INPROGRESS;
}
/*
diff --git a/tools/xl/xl_info.c b/tools/xl/xl_info.c
index bfbca93997dd..ca417df8e8a5 100644
--- a/tools/xl/xl_info.c
+++ b/tools/xl/xl_info.c
@@ -464,7 +464,8 @@ static void list_domains_details(const libxl_dominfo *info,
int nb_domain)
for (i = 0; i < nb_domain; i++) {
libxl_domain_config_init(&d_config);
- rc = libxl_retrieve_domain_configuration(ctx, info[i].domid,
&d_config);
+ rc = libxl_retrieve_domain_configuration(ctx, info[i].domid,
+ &d_config, NULL);
if (rc)
continue;
if (default_output_format == OUTPUT_FORMAT_JSON)
diff --git a/tools/xl/xl_saverestore.c b/tools/xl/xl_saverestore.c
index 5c70e2e8747d..9be033fe65e4 100644
--- a/tools/xl/xl_saverestore.c
+++ b/tools/xl/xl_saverestore.c
@@ -56,7 +56,8 @@ void save_domain_core_begin(uint32_t domid,
&d_config);
free(config_v);
} else {
- rc = libxl_retrieve_domain_configuration(ctx, domid, &d_config);
+ rc = libxl_retrieve_domain_configuration(ctx, domid, &d_config,
+ NULL);
if (rc) {
fprintf(stderr, "unable to retrieve domain configuration\n");
exit(EXIT_FAILURE);
diff --git a/tools/xl/xl_vmcontrol.c b/tools/xl/xl_vmcontrol.c
index 3fc6f565748c..eb6779a56197 100644
--- a/tools/xl/xl_vmcontrol.c
+++ b/tools/xl/xl_vmcontrol.c
@@ -377,7 +377,8 @@ static void reload_domain_config(uint32_t domid,
}
libxl_domain_config_init(&d_config_new);
- rc = libxl_retrieve_domain_configuration(ctx, domid, &d_config_new);
+ rc = libxl_retrieve_domain_configuration(ctx, domid, &d_config_new,
+ NULL);
if (rc) {
LOG("failed to retrieve guest configuration (rc=%d). "
"reusing old configuration", rc);
--
Anthony PERARD
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |