From: Yang Hongyang Date: Thu, 14 May 2015 08:55:09 +0000 (+0800) Subject: libxc/save: introduce setup() and cleanup() on save X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~3245 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=aed0d958c28d46af24ba08cb01a8e8e7146b30bb;p=xen.git libxc/save: introduce setup() and cleanup() on save introduce setup() and cleanup() which subsume the ctx->save.ops.{setup,cleanup}() calls. The SHADOW_OP_OFF hypercall is also included in the cleanup(). Signed-off-by: Yang Hongyang CC: Ian Campbell CC: Ian Jackson CC: Wei Liu CC: Andrew Cooper Reviewed-by: Andrew Cooper Acked-by: Ian Campbell --- diff --git a/tools/libxc/xc_sr_save.c b/tools/libxc/xc_sr_save.c index caa727d6ac..f4ab5c54ae 100644 --- a/tools/libxc/xc_sr_save.c +++ b/tools/libxc/xc_sr_save.c @@ -637,6 +637,31 @@ static int send_domain_memory_nonlive(struct xc_sr_context *ctx) return rc; } +static int setup(struct xc_sr_context *ctx) +{ + int rc; + + rc = ctx->save.ops.setup(ctx); + if ( rc ) + goto err; + + rc = 0; + + err: + return rc; +} + +static void cleanup(struct xc_sr_context *ctx) +{ + xc_interface *xch = ctx->xch; + + xc_shadow_control(xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_OFF, + NULL, 0, NULL, 0, NULL); + + if ( ctx->save.ops.cleanup(ctx) ) + PERROR("Failed to clean up"); +} + /* * Save a domain. */ @@ -648,7 +673,7 @@ static int save(struct xc_sr_context *ctx, uint16_t guest_type) IPRINTF("Saving domain %d, type %s", ctx->domid, dhdr_type_to_str(guest_type)); - rc = ctx->save.ops.setup(ctx); + rc = setup(ctx); if ( rc ) goto err; @@ -701,12 +726,7 @@ static int save(struct xc_sr_context *ctx, uint16_t guest_type) PERROR("Save failed"); done: - xc_shadow_control(xch, ctx->domid, XEN_DOMCTL_SHADOW_OP_OFF, - NULL, 0, NULL, 0, NULL); - - rc = ctx->save.ops.cleanup(ctx); - if ( rc ) - PERROR("Failed to clean up"); + cleanup(ctx); if ( saved_rc ) {