X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/6f190a0641f5b06a462b62955c15c77b8fb3990c..97f31cbc71fc13b3091893313a555c3cf1ecb798:/migration.c diff --git a/migration.c b/migration.c index 185d11260d..058f9e69f4 100644 --- a/migration.c +++ b/migration.c @@ -99,7 +99,7 @@ static void process_incoming_migration_co(void *opaque) qemu_fclose(f); if (ret < 0) { fprintf(stderr, "load of migration failed\n"); - exit(0); + exit(EXIT_FAILURE); } qemu_announce_self(); DPRINTF("successfully loaded vm state\n"); @@ -121,7 +121,7 @@ void process_incoming_migration(QEMUFile *f) int fd = qemu_get_fd(f); assert(fd != -1); - socket_set_nonblock(fd); + qemu_set_nonblock(fd); qemu_coroutine_enter(co, f); } @@ -197,11 +197,11 @@ MigrationInfo *qmp_query_migrate(Error **errp) info->ram->remaining = ram_bytes_remaining(); info->ram->total = ram_bytes_total(); info->ram->duplicate = dup_mig_pages_transferred(); + info->ram->skipped = skipped_mig_pages_transferred(); info->ram->normal = norm_mig_pages_transferred(); info->ram->normal_bytes = norm_mig_bytes_transferred(); info->ram->dirty_pages_rate = s->dirty_pages_rate; - if (blk_mig_active()) { info->has_disk = true; info->disk = g_malloc0(sizeof(*info->disk)); @@ -227,6 +227,7 @@ MigrationInfo *qmp_query_migrate(Error **errp) info->ram->remaining = 0; info->ram->total = ram_bytes_total(); info->ram->duplicate = dup_mig_pages_transferred(); + info->ram->skipped = skipped_mig_pages_transferred(); info->ram->normal = norm_mig_pages_transferred(); info->ram->normal_bytes = norm_mig_bytes_transferred(); break; @@ -348,7 +349,6 @@ static MigrationState *migrate_init(const MigrationParams *params) sizeof(enabled_capabilities)); memset(s, 0, sizeof(*s)); - s->bandwidth_limit = bandwidth_limit; s->params = *params; memcpy(s->enabled_capabilities, enabled_capabilities, sizeof(enabled_capabilities)); @@ -497,7 +497,6 @@ static void *migration_thread(void *opaque) { MigrationState *s = opaque; int64_t initial_time = qemu_get_clock_ms(rt_clock); - int64_t sleep_time = 0; int64_t initial_bytes = 0; int64_t max_size = 0; int64_t start_time = initial_time; @@ -540,7 +539,7 @@ static void *migration_thread(void *opaque) current_time = qemu_get_clock_ms(rt_clock); if (current_time >= initial_time + BUFFER_DELAY) { uint64_t transferred_bytes = qemu_ftell(s->file) - initial_bytes; - uint64_t time_spent = current_time - initial_time - sleep_time; + uint64_t time_spent = current_time - initial_time; double bandwidth = transferred_bytes / time_spent; max_size = bandwidth * migrate_max_downtime() / 1000000; @@ -554,14 +553,12 @@ static void *migration_thread(void *opaque) } qemu_file_reset_rate_limit(s->file); - sleep_time = 0; initial_time = current_time; initial_bytes = qemu_ftell(s->file); } if (qemu_file_rate_limit(s->file)) { /* usleep expects microseconds */ g_usleep((initial_time + BUFFER_DELAY - current_time)*1000); - sleep_time += qemu_get_clock_ms(rt_clock) - current_time; } }