[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 29/32] migration: init dst in migration_object_in
From: |
Peter Xu |
Subject: |
[Qemu-devel] [PATCH v4 29/32] migration: init dst in migration_object_init too |
Date: |
Wed, 8 Nov 2017 14:01:27 +0800 |
Though we may not need it, now we init both the src/dst migration
objects in migration_object_init() so that even incoming migration
object would be thread safe (it was not).
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
Signed-off-by: Peter Xu <address@hidden>
---
migration/migration.c | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/migration/migration.c b/migration/migration.c
index 9b7fc56ed8..536a771803 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -104,6 +104,7 @@ enum mig_rp_message_type {
dynamic creation of migration */
static MigrationState *current_migration;
+static MigrationIncomingState *current_incoming;
static bool migration_object_check(MigrationState *ms, Error **errp);
static int migration_maybe_pause(MigrationState *s,
@@ -119,6 +120,18 @@ void migration_object_init(void)
assert(!current_migration);
current_migration = MIGRATION_OBJ(object_new(TYPE_MIGRATION));
+ /*
+ * Init the migrate incoming object as well no matter whether
+ * we'll use it or not.
+ */
+ assert(!current_incoming);
+ current_incoming = g_new0(MigrationIncomingState, 1);
+ current_incoming->state = MIGRATION_STATUS_NONE;
+ qemu_mutex_init(¤t_incoming->rp_mutex);
+ qemu_event_init(¤t_incoming->main_thread_load_event, false);
+ qemu_sem_init(¤t_incoming->postcopy_pause_sem_dst, 0);
+ qemu_sem_init(¤t_incoming->postcopy_pause_sem_fault, 0);
+
if (!migration_object_check(current_migration, &err)) {
error_report_err(err);
exit(1);
@@ -144,19 +157,8 @@ MigrationState *migrate_get_current(void)
MigrationIncomingState *migration_incoming_get_current(void)
{
- static bool once;
- static MigrationIncomingState mis_current;
-
- if (!once) {
- mis_current.state = MIGRATION_STATUS_NONE;
- memset(&mis_current, 0, sizeof(MigrationIncomingState));
- qemu_mutex_init(&mis_current.rp_mutex);
- qemu_event_init(&mis_current.main_thread_load_event, false);
- qemu_sem_init(&mis_current.postcopy_pause_sem_dst, 0);
- qemu_sem_init(&mis_current.postcopy_pause_sem_fault, 0);
- once = true;
- }
- return &mis_current;
+ assert(current_incoming);
+ return current_incoming;
}
void migration_incoming_state_destroy(void)
--
2.13.6
- [Qemu-devel] [PATCH v4 15/32] migration: new cmd MIG_CMD_RECV_BITMAP, (continued)
- [Qemu-devel] [PATCH v4 15/32] migration: new cmd MIG_CMD_RECV_BITMAP, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 17/32] migration: new cmd MIG_CMD_POSTCOPY_RESUME, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 18/32] migration: new message MIG_RP_MSG_RESUME_ACK, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 19/32] migration: introduce SaveVMHandlers.resume_prepare, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 20/32] migration: synchronize dirty bitmap for resume, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 21/32] migration: setup ramstate for resume, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 23/32] migration: free SocketAddress where allocated, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 22/32] migration: final handshake for the resume, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 26/32] migration: return incoming task tag for fd, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 27/32] migration: store listen task tag, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 29/32] migration: init dst in migration_object_init too,
Peter Xu <=
- [Qemu-devel] [PATCH v4 30/32] migration: delay the postcopy-active state switch, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 32/32] migration, hmp: new command "migrate_pause", Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 31/32] migration, qmp: new command "migrate-pause", Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 24/32] migration: return incoming task tag for sockets, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 25/32] migration: return incoming task tag for exec, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 14/32] migration: wakeup dst ram-load-thread for recover, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 05/32] migration: implement "postcopy-pause" src logic, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 07/32] migration: allow src return path to pause, Peter Xu, 2017/11/08
- [Qemu-devel] [PATCH v4 12/32] migration: rebuild channel on source, Peter Xu, 2017/11/08