From dd63169766abd2b8dc33f4451dac5e778458a47c Mon Sep 17 00:00:00 2001 From: Li Zhijian Date: Thu, 2 Jul 2015 20:18:06 +0800 Subject: 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 Signed-off-by: Wen Congyang Signed-off-by: Juan Quintela --- exec.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'exec.c') 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. -- cgit v1.2.3