|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 7/9] tools/libxc: x86 pv restore implementation
On Wed, 2014-04-30 at 19:36 +0100, Andrew Cooper wrote:
> + ihdr.id = ntohl(ihdr.id);
> + ihdr.version = ntohl(ihdr.version);
> + ihdr.options = ntohs(ihdr.options);
> +
> + if ( ihdr.marker != IHDR_MARKER )
> + {
> + ERROR("Invalid marker: Got 0x%016"PRIx64, ihdr.marker);
> + return -1;
> + }
> + else if ( ihdr.id != IHDR_ID )
Can we do away with the unnecessary elses please.
> + if ( xc_domain_getinfo(xch, dom, 1, &ctx.dominfo) != 1 )
> + {
> + PERROR("Failed to get domain info");
> + return -1;
> + }
> +
> + if ( ctx.dominfo.domid != dom )
> + {
> + ERROR("Domain %d does not exist", dom);
> + return -1;
> + }
> +
> + ctx.domid = dom;
> + IPRINTF("Restoring domain %d", dom);
> +
> + if ( read_headers(&ctx) )
> + return -1;
> +
> + if ( ctx.dominfo.hvm )
> + {
> + ERROR("HVM Restore not supported yet");
> + return -1;
> + }
> + else
Unneeded.
> +
> +static int handle_x86_pv_vcpu_basic(struct context *ctx, struct record *rec)
> +{
> + xc_interface *xch = ctx->xch;
> + struct rec_x86_pv_vcpu *vhdr = rec->data;
> + vcpu_guest_context_any_t vcpu;
> + size_t vcpusz = ctx->x86_pv.width == 8 ? sizeof vcpu.x64 : sizeof
> vcpu.x32;
> + xen_pfn_t pfn, mfn;
> + unsigned long tmp;
> + unsigned i;
> + int rc = -1;
> +
> + if ( rec->length <= sizeof *vhdr )
> + {
> + ERROR("X86_PV_VCPU_BASIC record trucated: length %"PRIu32", min %zu",
"truncated"
> + else if ( (ctx->x86_pv.pfn_types[pfn] &
> XEN_DOMCTL_PFINFO_LTABTYPE_MASK) !=
> + (((xen_pfn_t)ctx->x86_pv.levels) <<
> XEN_DOMCTL_PFINFO_LTAB_SHIFT) )
I'd think some temporaries would help with clarity here.
> +static int handle_x86_pv_vcpu_extended(struct context *ctx, struct record
> *rec)
> +{
> + xc_interface *xch = ctx->xch;
> + struct rec_x86_pv_vcpu *vcpu = rec->data;
> + DECLARE_DOMCTL;
> +
> + if ( rec->length <= sizeof *vcpu )
> + {
> + ERROR("X86_PV_VCPU_EXTENDED record trucated: length %"PRIu32", min
> %zu",
> + rec->length, sizeof *vcpu + 1);
I've just realised that there was a X86_PV_VCPU_EXTENDED in
handle_x86_pv_vcpu_basic which was wrong, but I've trimmed it already so
I'll comment here.
> + return -1;
> + }
> + else if ( rec->length > sizeof *vcpu + 128 )
There's an awful lot of magic numbers throughout this series. Can we try
and use meaningful symbolic names for things please.
> +int restore_x86_pv(struct context *ctx)
> +{
> + xc_interface *xch = ctx->xch;
> + struct record rec;
> + int rc;
> +
> + IPRINTF("In experimental %s", __func__);
> +
> + if ( ctx->restore.guest_type != DHDR_TYPE_x86_pv )
> + {
> + ERROR("Unable to restore %s domain into an x86_pv domain",
> + dhdr_type_to_str(ctx->restore.guest_type));
> + return -1;
> + }
> + else if ( ctx->restore.guest_page_size != 4096 )
#define's exist for this.
> + /* all done */
> + IPRINTF("All Done");
> + assert(!rc);
> + goto cleanup;
> +
> + err:
> + assert(rc);
FWIW I think you could drop this and let the success case fall through
without the hop and a skip..
> + cleanup:
> +
> + free(ctx->x86_pv.p2m);
> + free(ctx->x86_pv.p2m_pfns);
> + free(ctx->x86_pv.pfn_types);
> + free(ctx->restore.populated_pfns);
> +
> + if ( ctx->x86_pv.m2p )
> + munmap(ctx->x86_pv.m2p, ctx->x86_pv.nr_m2p_frames * PAGE_SIZE);
> +
> + return rc;
> +}
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * tab-width: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |