aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2023-10-11 15:46:02 -0300
committerJuan Quintela <quintela@redhat.com>2023-10-17 09:25:14 +0200
commitccc09db87c7e5e6d52cdde320540f3dc0ee8b147 (patch)
treecae7f85f29120f38f11ffecb65d84091338cfd7f
parent1e43f165d0810cdd015ade9c37c93b2c2e720d5c (diff)
downloadqemu-ccc09db87c7e5e6d52cdde320540f3dc0ee8b147.zip
qemu-ccc09db87c7e5e6d52cdde320540f3dc0ee8b147.tar.gz
qemu-ccc09db87c7e5e6d52cdde320540f3dc0ee8b147.tar.bz2
migration/ram: Move xbzrle zero page handling into save_zero_page
It makes a bit more sense to have the zero page handling of xbzrle right where we save the zero page. Also invert the exit condition to remove one level of indentation which makes the next patch easier to grasp. Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231011184604.32364-6-farosas@suse.de>
-rw-r--r--migration/ram.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/migration/ram.c b/migration/ram.c
index 2ec28c4..229cad5 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1168,21 +1168,34 @@ static int save_zero_page_to_file(PageSearchStatus *pss, RAMBlock *block,
*
* Returns the number of pages written.
*
+ * @rs: current RAM state
* @pss: current PSS channel
* @block: block that contains the page we want to send
* @offset: offset inside the block for the page
*/
-static int save_zero_page(PageSearchStatus *pss, RAMBlock *block,
+static int save_zero_page(RAMState *rs, PageSearchStatus *pss, RAMBlock *block,
ram_addr_t offset)
{
int len = save_zero_page_to_file(pss, block, offset);
- if (len) {
- stat64_add(&mig_stats.zero_pages, 1);
- ram_transferred_add(len);
- return 1;
+ if (!len) {
+ return -1;
}
- return -1;
+
+ stat64_add(&mig_stats.zero_pages, 1);
+ ram_transferred_add(len);
+
+ /*
+ * Must let xbzrle know, otherwise a previous (now 0'd) cached
+ * page would be stale.
+ */
+ if (rs->xbzrle_started) {
+ XBZRLE_cache_lock();
+ xbzrle_cache_zero_page(block->offset + offset);
+ XBZRLE_cache_unlock();
+ }
+
+ return 1;
}
/*
@@ -2139,16 +2152,8 @@ static int ram_save_target_page_legacy(RAMState *rs, PageSearchStatus *pss)
return 1;
}
- res = save_zero_page(pss, block, offset);
+ res = save_zero_page(rs, pss, block, offset);
if (res > 0) {
- /* Must let xbzrle know, otherwise a previous (now 0'd) cached
- * page would be stale
- */
- if (rs->xbzrle_started) {
- XBZRLE_cache_lock();
- xbzrle_cache_zero_page(block->offset + offset);
- XBZRLE_cache_unlock();
- }
return res;
}