diff --git a/tools/include/xen-tools/bitops.h b/tools/include/xen-tools/bitops.h index 3b98fba6d7..29587e89fa 100644 --- a/tools/include/xen-tools/bitops.h +++ b/tools/include/xen-tools/bitops.h @@ -81,14 +81,15 @@ static inline int test_and_set_bit(unsigned long nr, void *addr) return oldbit; } -static inline void bitmap_or(void *_dst, const void *_other, +static inline void bitmap_or(void *_dst, const void *_src1, const void *_src2, unsigned long nr_bits) { char *dst = _dst; - const char *other = _other; + const char *src1 = _src1, *src2 = _src2; unsigned long i; + for ( i = 0; i < bitmap_size(nr_bits); ++i ) - dst[i] |= other[i]; + dst[i] = src1[i] | src2[i]; } #endif /* __XEN_TOOLS_BITOPS_H__ */ diff --git a/tools/libs/guest/xg_sr_save.c b/tools/libs/guest/xg_sr_save.c index 3b2c5222e4..fdbceab52e 100644 --- a/tools/libs/guest/xg_sr_save.c +++ b/tools/libs/guest/xg_sr_save.c @@ -668,7 +668,8 @@ static int suspend_and_send_dirty(struct xc_sr_context *ctx) else xc_set_progress_prefix(xch, "Checkpointed save"); - bitmap_or(dirty_bitmap, ctx->save.deferred_pages, ctx->save.p2m_size); + bitmap_or(dirty_bitmap, dirty_bitmap, ctx->save.deferred_pages, + ctx->save.p2m_size); if ( !ctx->save.live && ctx->stream_type == XC_STREAM_COLO ) {