From patchwork Mon Aug 11 14:29:20 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dr. David Alan Gilbert" X-Patchwork-Id: 379004 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id B2A401400B7 for ; Tue, 12 Aug 2014 00:31:19 +1000 (EST) Received: from localhost ([::1]:36232 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XGqd3-0000DA-Pl for incoming@patchwork.ozlabs.org; Mon, 11 Aug 2014 10:31:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40530) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XGqc7-0007Ly-6G for qemu-devel@nongnu.org; Mon, 11 Aug 2014 10:30:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XGqc0-0000iz-S8 for qemu-devel@nongnu.org; Mon, 11 Aug 2014 10:30:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37258) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XGqc0-0000io-Kg for qemu-devel@nongnu.org; Mon, 11 Aug 2014 10:30:12 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7BEU9gk011750 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 11 Aug 2014 10:30:09 -0400 Received: from dgilbert-t530.home.treblig.org (vpn1-5-102.ams2.redhat.com [10.36.5.102]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s7BEU08Q003792; Mon, 11 Aug 2014 10:30:08 -0400 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org Date: Mon, 11 Aug 2014 15:29:20 +0100 Message-Id: <1407767399-3030-5-git-send-email-dgilbert@redhat.com> In-Reply-To: <1407767399-3030-1-git-send-email-dgilbert@redhat.com> References: <1407767399-3030-1-git-send-email-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: aarcange@redhat.com, yamahata@private.email.ne.jp, lilei@linux.vnet.ibm.com, quintela@redhat.com Subject: [Qemu-devel] [PATCH v2 04/43] Create MigrationIncomingState X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: "Dr. David Alan Gilbert" There are currently lots of pieces of incoming migration state scattered around, and postcopy is adding more, and it seems better to try and keep it together. allocate MIS in process_incoming_migration_co Signed-off-by: Dr. David Alan Gilbert --- include/migration/migration.h | 9 +++++++++ include/qemu/typedefs.h | 2 ++ migration.c | 30 ++++++++++++++++++++++++++++++ savevm.c | 2 ++ 4 files changed, 43 insertions(+) diff --git a/include/migration/migration.h b/include/migration/migration.h index 3cb5ba8..8a36255 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -41,6 +41,15 @@ struct MigrationParams { typedef struct MigrationState MigrationState; +/* State for the incoming migration */ +struct MigrationIncomingState { + QEMUFile *file; +}; + +MigrationIncomingState *migration_incoming_get_current(void); +MigrationIncomingState *migration_incoming_state_init(QEMUFile *f); +void migration_incoming_state_destroy(void); + struct MigrationState { int64_t bandwidth_limit; diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index db1153a..0f79b5c 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -14,6 +14,7 @@ typedef struct Visitor Visitor; struct Monitor; typedef struct Monitor Monitor; +typedef struct MigrationIncomingState MigrationIncomingState; typedef struct MigrationParams MigrationParams; typedef struct Property Property; @@ -44,6 +45,7 @@ typedef struct PixelFormat PixelFormat; typedef struct QemuConsole QemuConsole; typedef struct CharDriverState CharDriverState; typedef struct MACAddr MACAddr; +typedef struct MigrationIncomingState MigrationIncomingState; typedef struct NetClientState NetClientState; typedef struct I2CBus I2CBus; typedef struct ISABus ISABus; diff --git a/migration.c b/migration.c index e241370..c203958 100644 --- a/migration.c +++ b/migration.c @@ -65,6 +65,7 @@ static NotifierList migration_state_notifiers = migrations at once. For now we don't need to add dynamic creation of migration */ +/* For outgoing */ MigrationState *migrate_get_current(void) { static MigrationState current_migration = { @@ -77,6 +78,28 @@ MigrationState *migrate_get_current(void) return ¤t_migration; } +/* For incoming */ +static MigrationIncomingState *mis_current; + +MigrationIncomingState *migration_incoming_get_current(void) +{ + return mis_current; +} + +MigrationIncomingState *migration_incoming_state_init(QEMUFile* f) +{ + mis_current = g_malloc0(sizeof(MigrationIncomingState)); + mis_current->file = f; + + return mis_current; +} + +void migration_incoming_state_destroy(void) +{ + g_free(mis_current); + mis_current = NULL; +} + void qemu_start_incoming_migration(const char *uri, Error **errp) { const char *p; @@ -104,11 +127,18 @@ static void process_incoming_migration_co(void *opaque) { QEMUFile *f = opaque; Error *local_err = NULL; + MigrationIncomingState *mis; int ret; + mis = migration_incoming_state_init(f); + ret = qemu_loadvm_state(f); + qemu_fclose(f); free_xbzrle_decoded_buf(); + migration_incoming_state_destroy(); + mis = NULL; + if (ret < 0) { error_report("load of migration failed: %s", strerror(-ret)); exit(EXIT_FAILURE); diff --git a/savevm.c b/savevm.c index cb6f0de..a0c3b40 100644 --- a/savevm.c +++ b/savevm.c @@ -1244,9 +1244,11 @@ int load_vmstate(const char *name) } qemu_system_reset(VMRESET_SILENT); + migration_incoming_state_init(f); ret = qemu_loadvm_state(f); qemu_fclose(f); + migration_incoming_state_destroy(); if (ret < 0) { error_report("Error %d while loading VM state", ret); return ret;