From: ChenLiang <chenlian...@huawei.com> Reducing data copy can reduce cpu overhead.
Signed-off-by: ChenLiang <chenlian...@huawei.com> Signed-off-by: Gonglei <arei.gong...@huawei.com> Reviewed-by: Juan Quintela <quint...@redhat.com> --- arch_init.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/arch_init.c b/arch_init.c index 84a4bd3..94b62e2 100644 --- a/arch_init.c +++ b/arch_init.c @@ -373,11 +373,8 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t **current_data, prev_cached_page = get_cached_data(XBZRLE.cache, current_addr); - /* save current buffer into memory */ - memcpy(XBZRLE.current_buf, *current_data, TARGET_PAGE_SIZE); - /* XBZRLE encoding (if there is no overflow) */ - encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf, + encoded_len = xbzrle_encode_buffer(prev_cached_page, *current_data, TARGET_PAGE_SIZE, XBZRLE.encoded_buf, TARGET_PAGE_SIZE); if (encoded_len == 0) { @@ -396,7 +393,8 @@ static int save_xbzrle_page(QEMUFile *f, uint8_t **current_data, /* we need to update the data in the cache, in order to get the same data */ if (!last_stage) { - memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE); + xbzrle_decode_buffer(XBZRLE.encoded_buf, encoded_len, prev_cached_page, + TARGET_PAGE_SIZE); } /* Send XBZRLE based compressed page */ -- 1.7.12.4