[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 |