summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorLi Zhijian <lizhijian@cn.fujitsu.com>2015-07-02 20:18:06 +0800
committerJuan Quintela <quintela@redhat.com>2015-07-07 14:54:56 +0200
commitdd63169766abd2b8dc33f4451dac5e778458a47c (patch)
tree6a79e5d05025fdd3f6b44ee7ade621ad66c4c878 /exec.c
parent2ff64038a59e8de2baa485806be0838f49f70b79 (diff)
downloadqemu-dd63169766abd2b8dc33f4451dac5e778458a47c.zip
migration: extend migration_bitmap
Prevously, if we hotplug a device(e.g. device_add e1000) during migration is processing in source side, qemu will add a new ram block but migration_bitmap is not extended. In this case, migration_bitmap will overflow and lead qemu abort unexpectedly. Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/exec.c b/exec.c
index 251dc79e10..b7f7f9818f 100644
--- a/exec.c
+++ b/exec.c
@@ -1414,6 +1414,11 @@ static ram_addr_t ram_block_add(RAMBlock *new_block, Error **errp)
}
}
+ new_ram_size = MAX(old_ram_size,
+ (new_block->offset + new_block->max_length) >> TARGET_PAGE_BITS);
+ if (new_ram_size > old_ram_size) {
+ migration_bitmap_extend(old_ram_size, new_ram_size);
+ }
/* Keep the list sorted from biggest to smallest block. Unlike QTAILQ,
* QLIST (which has an RCU-friendly variant) does not have insertion at
* tail, so save the last element in last_block.