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:
Shriram Rajagopalan committed 2012-05-18 11:00:41 +01:00
1 parent 8aa1a2601e
commit edb3f71c59
3 files changed
+21 -11

No files matched your search

+13 -8
View File
@@ -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
View File
@@ -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);
+2 -2
View File
@@ -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:
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.