introduce setup() and cleanup() which subsume the ctx->restore.ops.{setup,cleanup}() calls and also do memory alloc/free.
Signed-off-by: Yang Hongyang <yan...@cn.fujitsu.com> CC: Andrew Cooper <andrew.coop...@citrix.com> CC: Ian Campbell <ian.campb...@citrix.com> CC: Ian Jackson <ian.jack...@eu.citrix.com> CC: Wei Liu <wei.l...@citrix.com> --- tools/libxc/xc_sr_restore.c | 48 ++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c index 8022c3d..2345f66 100644 --- a/tools/libxc/xc_sr_restore.c +++ b/tools/libxc/xc_sr_restore.c @@ -510,6 +510,38 @@ static int process_record(struct xc_sr_context *ctx, struct xc_sr_record *rec) return rc; } +static int setup(struct xc_sr_context *ctx) +{ + xc_interface *xch = ctx->xch; + int rc; + + rc = ctx->restore.ops.setup(ctx); + if ( rc ) + goto err; + + ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1; + ctx->restore.populated_pfns = bitmap_alloc( + ctx->restore.max_populated_pfn + 1); + if ( !ctx->restore.populated_pfns ) + { + ERROR("Unable to allocate memory for populated_pfns bitmap"); + rc = -1; + goto err; + } + + err: + return rc; +} + +static void cleanup(struct xc_sr_context *ctx) +{ + xc_interface *xch = ctx->xch; + + free(ctx->restore.populated_pfns); + if ( ctx->restore.ops.cleanup(ctx) ) + PERROR("Failed to clean up"); +} + #ifdef XG_LIBXL_HVM_COMPAT extern int read_qemu(struct xc_sr_context *ctx); #endif @@ -524,19 +556,10 @@ static int restore(struct xc_sr_context *ctx) IPRINTF("Restoring domain"); - rc = ctx->restore.ops.setup(ctx); + rc = setup(ctx); if ( rc ) goto err; - ctx->restore.max_populated_pfn = (32 * 1024 / 4) - 1; - ctx->restore.populated_pfns = bitmap_alloc( - ctx->restore.max_populated_pfn + 1); - if ( !ctx->restore.populated_pfns ) - { - ERROR("Unable to allocate memory for populated_pfns bitmap"); - goto err; - } - do { rc = read_record(ctx, &rec); @@ -571,10 +594,7 @@ static int restore(struct xc_sr_context *ctx) PERROR("Restore failed"); done: - free(ctx->restore.populated_pfns); - rc = ctx->restore.ops.cleanup(ctx); - if ( rc ) - PERROR("Failed to clean up"); + cleanup(ctx); if ( saved_rc ) { -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel