On 14/05/15 09:55, Yang Hongyang wrote: > 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>
Reviewed-by: Andrew Cooper <andrew.coop...@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 ) > { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel