|
[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 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.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |