aboutsummaryrefslogtreecommitdiff
path: root/migration/ram.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-07-09 08:47:58 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2015-07-09 08:47:58 +0200
commitd09a6fde1590ca3a45b608b6873a680f208dfeb5 (patch)
tree9314bf17c73673d34c162fdf6a2a2e42d75efbe2 /migration/ram.c
parentacf7b7fdf31fa76b53803790917c8acf23a2badb (diff)
downloadqemu-d09a6fde1590ca3a45b608b6873a680f208dfeb5.zip
qemu-d09a6fde1590ca3a45b608b6873a680f208dfeb5.tar.gz
qemu-d09a6fde1590ca3a45b608b6873a680f208dfeb5.tar.bz2
migration: fix RCU deadlock
migration_end calls synchronize_rcu() within a critical section. That causes a deadlock; move the call after rcu_read_unlock(). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'migration/ram.c')
-rw-r--r--migration/ram.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/migration/ram.c b/migration/ram.c
index c696814..1e58cd3 100644
--- a/migration/ram.c
+++ b/migration/ram.c
@@ -1266,9 +1266,10 @@ static int ram_save_complete(QEMUFile *f, void *opaque)
flush_compressed_data(f);
ram_control_after_iterate(f, RAM_CONTROL_FINISH);
- migration_end();
rcu_read_unlock();
+
+ migration_end();
qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
return 0;