提交 b4b076da 编写于 作者: J Juan Quintela

migration: create Migration Incoming State at init time

Signed-off-by: NJuan Quintela <quintela@redhat.com>
Reviewed-by: NDr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <1485207141-1941-3-git-send-email-quintela@redhat.com>
Signed-off-by: NJuan Quintela <quintela@redhat.com>
上级 7d2c6c95
...@@ -122,7 +122,6 @@ struct MigrationIncomingState { ...@@ -122,7 +122,6 @@ struct MigrationIncomingState {
}; };
MigrationIncomingState *migration_incoming_get_current(void); MigrationIncomingState *migration_incoming_get_current(void);
MigrationIncomingState *migration_incoming_state_new(QEMUFile *f);
void migration_incoming_state_destroy(void); void migration_incoming_state_destroy(void);
/* /*
......
...@@ -111,32 +111,28 @@ MigrationState *migrate_get_current(void) ...@@ -111,32 +111,28 @@ MigrationState *migrate_get_current(void)
return &current_migration; return &current_migration;
} }
/* For incoming */
static MigrationIncomingState *mis_current;
MigrationIncomingState *migration_incoming_get_current(void) MigrationIncomingState *migration_incoming_get_current(void)
{ {
return mis_current; static bool once;
} static MigrationIncomingState mis_current;
MigrationIncomingState *migration_incoming_state_new(QEMUFile* f)
{
mis_current = g_new0(MigrationIncomingState, 1);
mis_current->from_src_file = f;
mis_current->state = MIGRATION_STATUS_NONE;
QLIST_INIT(&mis_current->loadvm_handlers);
qemu_mutex_init(&mis_current->rp_mutex);
qemu_event_init(&mis_current->main_thread_load_event, false);
return mis_current; if (!once) {
mis_current.state = MIGRATION_STATUS_NONE;
memset(&mis_current, 0, sizeof(MigrationIncomingState));
QLIST_INIT(&mis_current.loadvm_handlers);
qemu_mutex_init(&mis_current.rp_mutex);
qemu_event_init(&mis_current.main_thread_load_event, false);
once = true;
}
return &mis_current;
} }
void migration_incoming_state_destroy(void) void migration_incoming_state_destroy(void)
{ {
qemu_event_destroy(&mis_current->main_thread_load_event); struct MigrationIncomingState *mis = migration_incoming_get_current();
loadvm_free_handlers(mis_current);
g_free(mis_current); qemu_event_destroy(&mis->main_thread_load_event);
mis_current = NULL; loadvm_free_handlers(mis);
} }
...@@ -382,11 +378,11 @@ static void process_incoming_migration_bh(void *opaque) ...@@ -382,11 +378,11 @@ static void process_incoming_migration_bh(void *opaque)
static void process_incoming_migration_co(void *opaque) static void process_incoming_migration_co(void *opaque)
{ {
QEMUFile *f = opaque; QEMUFile *f = opaque;
MigrationIncomingState *mis; MigrationIncomingState *mis = migration_incoming_get_current();
PostcopyState ps; PostcopyState ps;
int ret; int ret;
mis = migration_incoming_state_new(f); mis->from_src_file = f;
postcopy_state_set(POSTCOPY_INCOMING_NONE); postcopy_state_set(POSTCOPY_INCOMING_NONE);
migrate_set_state(&mis->state, MIGRATION_STATUS_NONE, migrate_set_state(&mis->state, MIGRATION_STATUS_NONE,
MIGRATION_STATUS_ACTIVE); MIGRATION_STATUS_ACTIVE);
......
...@@ -2199,7 +2199,6 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp) ...@@ -2199,7 +2199,6 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state"); qio_channel_set_name(QIO_CHANNEL(ioc), "migration-xen-load-state");
f = qemu_fopen_channel_input(QIO_CHANNEL(ioc)); f = qemu_fopen_channel_input(QIO_CHANNEL(ioc));
migration_incoming_state_new(f);
ret = qemu_loadvm_state(f); ret = qemu_loadvm_state(f);
qemu_fclose(f); qemu_fclose(f);
if (ret < 0) { if (ret < 0) {
...@@ -2215,6 +2214,7 @@ int load_vmstate(const char *name) ...@@ -2215,6 +2214,7 @@ int load_vmstate(const char *name)
QEMUFile *f; QEMUFile *f;
int ret; int ret;
AioContext *aio_context; AioContext *aio_context;
MigrationIncomingState *mis = migration_incoming_get_current();
if (!bdrv_all_can_snapshot(&bs)) { if (!bdrv_all_can_snapshot(&bs)) {
error_report("Device '%s' is writable but does not support snapshots.", error_report("Device '%s' is writable but does not support snapshots.",
...@@ -2265,7 +2265,7 @@ int load_vmstate(const char *name) ...@@ -2265,7 +2265,7 @@ int load_vmstate(const char *name)
} }
qemu_system_reset(VMRESET_SILENT); qemu_system_reset(VMRESET_SILENT);
migration_incoming_state_new(f); mis->from_src_file = f;
aio_context_acquire(aio_context); aio_context_acquire(aio_context);
ret = qemu_loadvm_state(f); ret = qemu_loadvm_state(f);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册