[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/13] migration: Fix a potential issue
From: |
Amit Shah |
Subject: |
[Qemu-devel] [PULL 05/13] migration: Fix a potential issue |
Date: |
Fri, 17 Jun 2016 18:36:44 +0530 |
From: Liang Li <address@hidden>
At the end of live migration and before vm_start() on the destination
side, we should make sure all the decompression tasks are finished, if
this can not be guaranteed, the VM may get the incorrect memory data,
or the updated memory may be overwritten by the decompression thread.
Add the code to fix this potential issue.
Suggested-by: David Alan Gilbert <address@hidden>
Suggested-by: Juan Quintela <address@hidden>
Signed-off-by: Liang Li <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Amit Shah <address@hidden>
---
migration/ram.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/migration/ram.c b/migration/ram.c
index f3fe6c7..5ccc068 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -2223,6 +2223,24 @@ static void *do_data_decompress(void *opaque)
return NULL;
}
+static void wait_for_decompress_done(void)
+{
+ int idx, thread_count;
+
+ if (!migrate_use_compression()) {
+ return;
+ }
+
+ thread_count = migrate_decompress_threads();
+ qemu_mutex_lock(&decomp_done_lock);
+ for (idx = 0; idx < thread_count; idx++) {
+ while (!decomp_param[idx].done) {
+ qemu_cond_wait(&decomp_done_cond, &decomp_done_lock);
+ }
+ }
+ qemu_mutex_unlock(&decomp_done_lock);
+}
+
void migrate_decompress_threads_create(void)
{
int i, thread_count;
@@ -2557,6 +2575,7 @@ static int ram_load(QEMUFile *f, void *opaque, int
version_id)
}
}
+ wait_for_decompress_done();
rcu_read_unlock();
DPRINTF("Completed load of VM with exit code %d seq iteration "
"%" PRIu64 "\n", ret, seq_iter);
--
2.7.4
- [Qemu-devel] [PULL 00/13] migration: many fixes, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 02/13] migration: Trace improvements, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 01/13] migration: Don't use *_to_cpup() and cpu_to_*w(), Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 04/13] migration: Fix multi-thread compression bug, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 03/13] migration: fix inability to save VM after snapshot, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 06/13] migration: remove useless code, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 08/13] migration: refine ram_save_compressed_page, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 07/13] qemu-file: Fix qemu_put_compression_data flaw, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 05/13] migration: Fix a potential issue,
Amit Shah <=
- [Qemu-devel] [PULL 09/13] migration: protect the quit flag by lock, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 11/13] migration: refine the decompression code, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 10/13] migration: refine the compression code, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 12/13] migration: code clean up, Amit Shah, 2016/06/17
- [Qemu-devel] [PULL 13/13] vmstate-static-checker: fix size mismatch detection in unused fields, Amit Shah, 2016/06/17
- Re: [Qemu-devel] [PULL 00/13] migration: many fixes, Peter Maydell, 2016/06/17