|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 15/16] libxc/restore: introduce setup() and cleanup() on restore
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 <yanghy@xxxxxxxxxxxxxx>
> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> 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@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |