On Wed, Feb 8, 2017 at 5:19 PM, Thomas Huth <th...@redhat.com> wrote: > On 03.02.2017 11:36, Ashijeet Acharya wrote: >> Migration of a "none" machine with no RAM crashes abruptly as >> bitmap_new() fails and thus aborts. Instead place zero RAM checks at >> appropriate places to skip migration of RAM in this case and complete >> migration successfully for devices only. >> >> Signed-off-by: Ashijeet Acharya <ashijeetacha...@gmail.com> >> --- >> Changes in v2: >> - try to migrate successfully by skipping RAM (Paolo, Greg) >> - drop the idea of erroring out and failing nicely >> migration/ram.c | 22 +++++++++++++++------- >> 1 file changed, 15 insertions(+), 7 deletions(-) >> >> diff --git a/migration/ram.c b/migration/ram.c >> index ef8fadf..2f19566 100644 >> --- a/migration/ram.c >> +++ b/migration/ram.c >> @@ -1325,6 +1325,11 @@ static int ram_find_and_save_block(QEMUFile *f, bool >> last_stage, >> ram_addr_t dirty_ram_abs; /* Address of the start of the dirty page in >> ram_addr_t space */ >> >> + /* No dirty page as there is zero RAM */ >> + if (!ram_bytes_total()) { >> + return pages; >> + } >> + >> pss.block = last_seen_block; >> pss.offset = last_offset; >> pss.complete_round = false; >> @@ -1912,14 +1917,17 @@ static int ram_save_init_globals(void) >> bytes_transferred = 0; >> reset_ram_globals(); >> >> - ram_bitmap_pages = last_ram_offset() >> TARGET_PAGE_BITS; >> - migration_bitmap_rcu = g_new0(struct BitmapRcu, 1); >> - migration_bitmap_rcu->bmap = bitmap_new(ram_bitmap_pages); >> - bitmap_set(migration_bitmap_rcu->bmap, 0, ram_bitmap_pages); >> + /* Skip setting bitmap if there is no RAM */ >> + if (ram_bytes_total()) { >> + ram_bitmap_pages = last_ram_offset() >> TARGET_PAGE_BITS; >> + migration_bitmap_rcu = g_new0(struct BitmapRcu, 1); >> + migration_bitmap_rcu->bmap = bitmap_new(ram_bitmap_pages); >> + bitmap_set(migration_bitmap_rcu->bmap, 0, ram_bitmap_pages); > > I guess the problem was here that ram_bitmap_pages was 0 ? So instead of > checking "if (ram_bytes_total())", would it maybe be nicer to check for > "if (ram_bitmap_pages)" instead? > I thought of using that first, but ram_bytes_total() works for both the places? No?
Ashijeet > Thomas >