X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/8e84865e54cb66fd7b57bb18c312ad3d56b6e276..759c90ba3d4f8dcb748d7719f7ea82b181ffd590:/migration.c diff --git a/migration.c b/migration.c index a160462dfa..e5ba51c314 100644 --- a/migration.c +++ b/migration.c @@ -32,7 +32,7 @@ #endif /* Migration speed throttling */ -static uint32_t max_throttle = (32 << 20); +static int64_t max_throttle = (32 << 20); static MigrationState *current_migration; @@ -132,11 +132,13 @@ int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data) int do_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret_data) { - double d; + int64_t d; FdMigrationState *s; - d = qdict_get_double(qdict, "value"); - d = MAX(0, MIN(UINT32_MAX, d)); + d = qdict_get_int(qdict, "value"); + if (d < 0) { + d = 0; + } max_throttle = d; s = migrate_to_fms(current_migration); @@ -316,8 +318,14 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size) if (ret == -1) ret = -(s->get_error(s)); - if (ret == -EAGAIN) + if (ret == -EAGAIN) { qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s); + } else if (ret < 0) { + if (s->mon) { + monitor_resume(s->mon); + } + s->state = MIG_STATE_ERROR; + } return ret; } @@ -362,8 +370,6 @@ void migrate_fd_put_ready(void *opaque) DPRINTF("done iterating\n"); vm_stop(0); - qemu_aio_flush(); - bdrv_flush_all(); if ((qemu_savevm_state_complete(s->mon, s->file)) < 0) { if (old_vm_running) { vm_start();