diff options
| author | Li Zhijian | 2015-07-02 14:18:06 +0200 |
|---|---|---|
| committer | Juan Quintela | 2015-07-07 14:54:56 +0200 |
| commit | dd63169766abd2b8dc33f4451dac5e778458a47c (patch) | |
| tree | 6a79e5d05025fdd3f6b44ee7ade621ad66c4c878 /exec.c | |
| parent | migration: protect migration_bitmap (diff) | |
| download | qemu-dd63169766abd2b8dc33f4451dac5e778458a47c.tar.gz qemu-dd63169766abd2b8dc33f4451dac5e778458a47c.tar.xz qemu-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.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. |
