[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] libxc/save: reuse send_dirty_pages() in send_all_pages()
commit 1238640c9e700819732d42c7e611f8dfa508eb60 Author: Yang Hongyang <yanghy@xxxxxxxxxxxxxx> AuthorDate: Thu May 14 16:55:14 2015 +0800 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Thu May 14 13:03:57 2015 +0100 libxc/save: reuse send_dirty_pages() in send_all_pages() introduce bitmap_set() to set the entire bitmap. in send_all_pages(), set the entire bitmap and call send_dirty_pages(). Signed-off-by: Yang Hongyang <yanghy@xxxxxxxxxxxxxx> CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx> CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Ian Campbell <Ian.Campbell@xxxxxxxxxx> --- tools/libxc/xc_bitops.h | 5 +++++ tools/libxc/xc_sr_save.c | 44 ++++++++++++++------------------------------ 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/tools/libxc/xc_bitops.h b/tools/libxc/xc_bitops.h index dfce3b8..cd749f4 100644 --- a/tools/libxc/xc_bitops.h +++ b/tools/libxc/xc_bitops.h @@ -26,6 +26,11 @@ static inline unsigned long *bitmap_alloc(int nr_bits) return calloc(1, bitmap_size(nr_bits)); } +static inline void bitmap_set(unsigned long *addr, int nr_bits) +{ + memset(addr, 0xff, bitmap_size(nr_bits)); +} + static inline void bitmap_clear(unsigned long *addr, int nr_bits) { memset(addr, 0, bitmap_size(nr_bits)); diff --git a/tools/libxc/xc_sr_save.c b/tools/libxc/xc_sr_save.c index 3768bda..1d0a46d 100644 --- a/tools/libxc/xc_sr_save.c +++ b/tools/libxc/xc_sr_save.c @@ -344,36 +344,6 @@ static int suspend_domain(struct xc_sr_context *ctx) } /* - * Send all pages in the guests p2m. Used as the first iteration of the live - * migration loop, and for a non-live save. - */ -static int send_all_pages(struct xc_sr_context *ctx) -{ - xc_interface *xch = ctx->xch; - xen_pfn_t p; - int rc; - - for ( p = 0; p < ctx->save.p2m_size; ++p ) - { - rc = add_to_batch(ctx, p); - if ( rc ) - return rc; - - /* Update progress every 4MB worth of memory sent. */ - if ( (p & ((1U << (22 - 12)) - 1)) == 0 ) - xc_report_progress_step(xch, p, ctx->save.p2m_size); - } - - rc = flush_batch(ctx); - if ( rc ) - return rc; - - xc_report_progress_step(xch, ctx->save.p2m_size, - ctx->save.p2m_size); - return 0; -} - -/* * Send a subset of pages in the guests p2m, according to the dirty bitmap. * Used for each subsequent iteration of the live migration loop. * @@ -416,6 +386,20 @@ static int send_dirty_pages(struct xc_sr_context *ctx, return 0; } +/* + * Send all pages in the guests p2m. Used as the first iteration of the live + * migration loop, and for a non-live save. + */ +static int send_all_pages(struct xc_sr_context *ctx) +{ + DECLARE_HYPERCALL_BUFFER_SHADOW(unsigned long, dirty_bitmap, + &ctx->save.dirty_bitmap_hbuf); + + bitmap_set(dirty_bitmap, ctx->save.p2m_size); + + return send_dirty_pages(ctx, ctx->save.p2m_size); +} + static int enable_logdirty(struct xc_sr_context *ctx) { xc_interface *xch = ctx->xch; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |