mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl: support suspend_cancel in domain_resume
Add an extra parameter to libxl_domain_resume indicating if the caller wishes to use the SUSPEND_CANCEL style resume instead of the normal resume. Signed-off-by: Shriram Rajagopalan <rshriram@cs.ubc.ca> Acked-by: Ian Campbell <ian.campbell@citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com>
This commit is contained in:
1 parent
8aa1a2601e
commit
edb3f71c59
3 files changed
+21
-11
No files matched your search
+13
-8
@@ -374,24 +374,29 @@ int libxl_domain_rename(libxl_ctx *ctx, uint32_t domid,
|
||||
return rc;
|
||||
}
|
||||
|
||||
int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid)
|
||||
int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid, int suspend_cancel)
|
||||
{
|
||||
GC_INIT(ctx);
|
||||
int rc = 0;
|
||||
|
||||
if (LIBXL__DOMAIN_IS_TYPE(gc, domid, HVM)) {
|
||||
LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Called domain_resume on "
|
||||
"non-cooperative hvm domain %u", domid);
|
||||
rc = ERROR_NI;
|
||||
goto out;
|
||||
}
|
||||
if (xc_domain_resume(ctx->xch, domid, 0)) {
|
||||
if (xc_domain_resume(ctx->xch, domid, suspend_cancel)) {
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
|
||||
"xc_domain_resume failed for domain %u",
|
||||
domid);
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (LIBXL__DOMAIN_IS_TYPE(gc, domid, HVM)) {
|
||||
rc = libxl__domain_resume_device_model(gc, domid);
|
||||
if (rc) {
|
||||
LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
|
||||
"failed to resume device model for domain %u:%d",
|
||||
domid, rc);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (!xs_resume_domain(ctx->xsh, domid)) {
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR,
|
||||
"xs_resume_domain failed for domain %u",
|
||||
|
||||
+6
-1
@@ -527,7 +527,12 @@ void libxl_domain_config_init(libxl_domain_config *d_config);
|
||||
void libxl_domain_config_dispose(libxl_domain_config *d_config);
|
||||
int libxl_domain_suspend(libxl_ctx *ctx, libxl_domain_suspend_info *info,
|
||||
uint32_t domid, int fd);
|
||||
int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid);
|
||||
|
||||
/* @param suspend_cancel [from xenctrl.h:xc_domain_resume( @param fast )]
|
||||
* If this parameter is true, use co-operative resume. The guest
|
||||
* must support this.
|
||||
*/
|
||||
int libxl_domain_resume(libxl_ctx *ctx, uint32_t domid, int suspend_cancel);
|
||||
int libxl_domain_shutdown(libxl_ctx *ctx, uint32_t domid);
|
||||
int libxl_domain_reboot(libxl_ctx *ctx, uint32_t domid);
|
||||
int libxl_domain_destroy(libxl_ctx *ctx, uint32_t domid);
|
||||
|
||||
@@ -3040,7 +3040,7 @@ static void migrate_domain(const char *domain_spec, const char *rune,
|
||||
if (common_domname) {
|
||||
libxl_domain_rename(ctx, domid, away_domname, common_domname);
|
||||
}
|
||||
rc = libxl_domain_resume(ctx, domid);
|
||||
rc = libxl_domain_resume(ctx, domid, 0);
|
||||
if (!rc) fprintf(stderr, "migration sender: Resumed OK.\n");
|
||||
|
||||
fprintf(stderr, "Migration failed due to problems at target.\n");
|
||||
@@ -3062,7 +3062,7 @@ static void migrate_domain(const char *domain_spec, const char *rune,
|
||||
close(send_fd);
|
||||
migration_child_report(child, recv_fd);
|
||||
fprintf(stderr, "Migration failed, resuming at sender.\n");
|
||||
libxl_domain_resume(ctx, domid);
|
||||
libxl_domain_resume(ctx, domid, 0);
|
||||
exit(-ERROR_FAIL);
|
||||
|
||||
failed_badly:
|
||||
|
||||