diff options
author | Uri Lublin <uril@qumranet.com> | 2007-02-22 18:53:38 +0000 |
---|---|---|
committer | Uri Lublin <uril@qumranet.com> | 2007-02-22 18:53:38 +0000 |
commit | 8514a1b456601a477da1efa20fd3b1ef0cd29131 (patch) | |
tree | 45ac805320df39450d264aab64334a2579dc2b5c | |
parent | c505ba0b1a1b6da4ee611bb28bde1e97f9db4ab6 (diff) |
kvm migration: add support for kvm live migration.
cpu_physical_memory_set_dirty_tracking() now enables/disables kvm's
dirty-pages-logging
Using kvm_update_dirty_pages_log() all dirty pages are logged in qemu's
dirty pages bytemap, and all those pages are retransmitted.
Also added 'return 0' to start_migration if everything is OK.
-rw-r--r-- | migration.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/migration.c b/migration.c index be7bedacb..1d916d5b6 100644 --- a/migration.c +++ b/migration.c @@ -24,6 +24,9 @@ #include "vl.h" #include "qemu_socket.h" +#ifdef USE_KVM +#include "qemu-kvm.h" +#endif #include <sys/wait.h> @@ -181,6 +184,11 @@ static void migrate_write(void *opaque) if (migrate_write_buffer(s)) return; +#ifdef USE_KVM + if (kvm_allowed && !*s->has_error) + *s->has_error = kvm_update_dirty_pages_log(); +#endif + if (migrate_check_convergence(s) || *s->has_error) { qemu_del_timer(s->timer); qemu_free_timer(s->timer); @@ -262,7 +270,10 @@ static int start_migration(MigrationState *s) cpu_physical_memory_set_dirty(addr); } - cpu_physical_memory_set_dirty_tracking(1); + if (cpu_physical_memory_set_dirty_tracking(1)) { + *s->has_error = 16; + return -1; + } s->addr = 0; s->iteration = 0; @@ -273,6 +284,7 @@ static int start_migration(MigrationState *s) qemu_mod_timer(s->timer, qemu_get_clock(rt_clock)); qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_write, s); + return 0; } static MigrationState *migration_init_fd(int detach, int fd) |