diff options
author | Li Zhijian <lizhijian@cn.fujitsu.com> | 2015-07-02 20:18:06 +0800 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2015-07-07 14:54:56 +0200 |
commit | dd63169766abd2b8dc33f4451dac5e778458a47c (patch) | |
tree | 6a79e5d05025fdd3f6b44ee7ade621ad66c4c878 /exec.c | |
parent | 2ff64038a59e8de2baa485806be0838f49f70b79 (diff) |
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.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -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. |