static void exec_accept_incoming_migration(void *opaque) { QEMUFile *f = opaque; process_incoming_migration(f); qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL); qemu_fclose(f); }
int exec_start_incoming_migration(const char *command) { QEMUFile *f; DPRINTF("Attempting to start an incoming migration\n"); f = qemu_popen_cmd(command, "r"); if(f == NULL) { DPRINTF("Unable to apply qemu wrapper to popen file\n"); return -errno; } qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, exec_accept_incoming_migration, NULL, f); return 0; }
static void exec_accept_incoming_migration(void *opaque) { QEMUFile *f = opaque; // TLC (move below to exec_start_incoming_migration() printf(" in tlc_exec_accept_incoming_migration()\n"); mthread = 1; //incoming_protocol = INCOMING_EXEC; // s'th to tell the vm not autostart tlc_migration_init(TLC_INCOMING_PAGES); process_incoming_migration(f); tlc_migration_finish(TLC_INCOMING_PAGES); mthread = 0; qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL); qemu_fclose(f); }
static void exec_accept_incoming_migration(void *opaque) { QEMUFile *f = opaque; int ret; ret = qemu_loadvm_state(f); if (ret < 0) { fprintf(stderr, "load of migration failed\n"); goto err; } qemu_announce_self(); dprintf("successfully loaded vm state\n"); /* we've successfully migrated, close the fd */ qemu_set_fd_handler2(qemu_stdio_fd(f), NULL, NULL, NULL, NULL); if (autostart) vm_start(); err: qemu_fclose(f); }