cryptospore / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone

Blame SOURCES/kvm-migration-multifd-clean-pages-after-filling-packet.patch

902636
From 32ee75b7f4a31d6080e5659e2a0285a046ef1036 Mon Sep 17 00:00:00 2001
902636
From: Juan Quintela <quintela@redhat.com>
902636
Date: Tue, 3 Mar 2020 14:51:34 +0000
902636
Subject: [PATCH 02/18] migration/multifd: clean pages after filling packet
902636
902636
RH-Author: Juan Quintela <quintela@redhat.com>
902636
Message-id: <20200303145143.149290-2-quintela@redhat.com>
902636
Patchwork-id: 94112
902636
O-Subject: [RHEL-AV-8.2.0 qemu-kvm PATCH v2 01/10] migration/multifd: clean pages after filling packet
902636
Bugzilla: 1738451
902636
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
902636
RH-Acked-by: Peter Xu <peterx@redhat.com>
902636
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
902636
902636
From: Wei Yang <richardw.yang@linux.intel.com>
902636
902636
This is a preparation for the next patch:
902636
902636
    not use multifd during postcopy.
902636
902636
Without enabling postcopy, everything looks good. While after enabling
902636
postcopy, migration may fail even not use multifd during postcopy. The
902636
reason is the pages is not properly cleared and *old* target page will
902636
continue to be transferred.
902636
902636
After clean pages, migration succeeds.
902636
902636
Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
902636
Reviewed-by: Juan Quintela <quintela@redhat.com>
902636
Signed-off-by: Juan Quintela <quintela@redhat.com>
902636
(cherry picked from commit eab54aa78ffd9fb7895b20fc2761ee998479489b)
902636
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
902636
---
902636
 migration/ram.c | 6 ++++--
902636
 1 file changed, 4 insertions(+), 2 deletions(-)
902636
902636
diff --git a/migration/ram.c b/migration/ram.c
902636
index 5078f94..65580e3 100644
902636
--- a/migration/ram.c
902636
+++ b/migration/ram.c
902636
@@ -944,10 +944,10 @@ static int multifd_send_pages(RAMState *rs)
902636
         }
902636
         qemu_mutex_unlock(&p->mutex);
902636
     }
902636
-    p->pages->used = 0;
902636
+    assert(!p->pages->used);
902636
+    assert(!p->pages->block);
902636
 
902636
     p->packet_num = multifd_send_state->packet_num++;
902636
-    p->pages->block = NULL;
902636
     multifd_send_state->pages = p->pages;
902636
     p->pages = pages;
902636
     transferred = ((uint64_t) pages->used) * TARGET_PAGE_SIZE + p->packet_len;
902636
@@ -1129,6 +1129,8 @@ static void *multifd_send_thread(void *opaque)
902636
             p->flags = 0;
902636
             p->num_packets++;
902636
             p->num_pages += used;
902636
+            p->pages->used = 0;
902636
+            p->pages->block = NULL;
902636
             qemu_mutex_unlock(&p->mutex);
902636
 
902636
             trace_multifd_send(p->id, packet_num, used, flags,
902636
-- 
902636
1.8.3.1
902636