[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH Remus v2 02/10] tools/libxc: introduce setup() and cleanup() on save
On Mon, 2015-05-11 at 09:20 +0800, Hongyang Yang wrote: > > On 05/08/2015 06:08 PM, Andrew Cooper wrote: > > On 08/05/15 10:59, Hongyang Yang wrote: > >> > >>> > >>> In general, a good change, but some comments... > >>> > >>>> --- > >>>> tools/libxc/xc_sr_save.c | 72 > >>>> +++++++++++++++++++++++++++++------------------- > >>>> 1 file changed, 44 insertions(+), 28 deletions(-) > >>>> > >>>> diff --git a/tools/libxc/xc_sr_save.c b/tools/libxc/xc_sr_save.c > >>>> index cc3e6b1..2394bc4 100644 > >>>> --- a/tools/libxc/xc_sr_save.c > >>>> +++ b/tools/libxc/xc_sr_save.c > >>>> @@ -607,13 +607,10 @@ static int send_domain_memory_nonlive(struct > >>>> xc_sr_context *ctx) > >>>> return rc; > >>>> } > >>>> > >>>> -/* > >>>> - * Save a domain. > >>>> - */ > >>>> -static int save(struct xc_sr_context *ctx, uint16_t guest_type) > >>>> +static int setup(struct xc_sr_context *ctx) > >>>> { > >>>> xc_interface *xch = ctx->xch; > >>>> - int rc, saved_rc = 0, saved_errno = 0; > >>>> + int rc; > >>>> DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, > >>>> (&ctx->save.dirty_bitmap_hbuf)); > >>>> > >>>> @@ -632,13 +629,51 @@ static int save(struct xc_sr_context *ctx, > >>>> uint16_t guest_type) > >>>> goto err; > >>>> } > >>>> > >>>> - IPRINTF("Saving domain %d, type %s", > >>>> - ctx->domid, dhdr_type_to_str(guest_type)); > >>>> - > >>>> 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; > >>>> + DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, > >>>> + (&ctx->save.dirty_bitmap_hbuf)); > >>>> + > >>>> + 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"); > >>>> + > >>>> + if ( dirty_bitmap ) > >>>> + xc_hypercall_buffer_free_pages(xch, dirty_bitmap, > >>>> + > >>>> NRPAGES(bitmap_size(ctx->save.p2m_size))); > >>> > >>> xc_hypercall_buffer_free_pages() if fine dealing with NULL, just like > >>> free() is. You can drop the conditional. > >> > >> Actually this is another trick that I need to deal with those > >> hypercall macros. > >> DECLARE_HYPERCALL_BUFFER_SHADOW will define a user pointer "dirty_bitmap" > >> and a shadow buffer, although xc_hypercall_buffer_free_pages takes > >> "dirty_bitmap" as an augument, but it is also a MACRO, without > >> "if ( dirty_bitmap )", the compiler will report "dirty_bitmap" unused > >> error... > > > > Ah, in which case you would be better using > > xc__hypercall_buffer_free_pages() and not creating the local shadow in > > the first place. > > I thought we'd better use those MACROs which described in the comments... > If it is OK to use xc__hypercall_buffer_free_pages(), I will fix it in > the next version. If anything I think I'd prefer for the if to move inside the xc_hypercall_buffer_free_pages macro. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |