From patchwork Thu May 21 12:24:14 2015 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: 474991 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 0F88014007F for ; Thu, 21 May 2015 22:26:35 +1000 (AEST) Received: from localhost ([::1]:57322 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YvPYW-0004U6-UQ for incoming@patchwork.ozlabs.org; Thu, 21 May 2015 08:26:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54855) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YvPWW-00011L-4l for qemu-devel@nongnu.org; Thu, 21 May 2015 08:24:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YvPWV-0001lU-0Y for qemu-devel@nongnu.org; Thu, 21 May 2015 08:24:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:33470) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YvPWU-0001kz-QW for qemu-devel@nongnu.org; Thu, 21 May 2015 08:24:26 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 7FB78AC7C5; Thu, 21 May 2015 12:24:26 +0000 (UTC) Received: from dgilbert-t530.redhat.com (ovpn-116-101.ams2.redhat.com [10.36.116.101]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t4LCOHsE002227; Thu, 21 May 2015 08:24:25 -0400 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org Date: Thu, 21 May 2015 13:24:14 +0100 Message-Id: <1432211056-6265-5-git-send-email-dgilbert@redhat.com> In-Reply-To: <1432211056-6265-1-git-send-email-dgilbert@redhat.com> References: <1432211056-6265-1-git-send-email-dgilbert@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: amit.shah@redhat.com, david@gibson.dropbear.id.au, quintela@redhat.com Subject: [Qemu-devel] [PATCH 4/6] 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 Reviewed-by: Amit Shah Reviewed-by: David Gibson Reviewed-by: Juan Quintela --- include/migration/migration.h | 9 +++++++++ include/qemu/typedefs.h | 1 + migration/migration.c | 28 ++++++++++++++++++++++++++++ savevm.c | 2 ++ 4 files changed, 40 insertions(+) diff --git a/include/migration/migration.h b/include/migration/migration.h index a6e025a..00fb6a0 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -42,6 +42,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_new(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 cde3314..74dfad3 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -38,6 +38,7 @@ typedef struct MemoryListener MemoryListener; typedef struct MemoryMappingList MemoryMappingList; typedef struct MemoryRegion MemoryRegion; typedef struct MemoryRegionSection MemoryRegionSection; +typedef struct MigrationIncomingState MigrationIncomingState; typedef struct MigrationParams MigrationParams; typedef struct Monitor Monitor; typedef struct MouseTransformInfo MouseTransformInfo; diff --git a/migration/migration.c b/migration/migration.c index 1660d74..9cf4743 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -53,6 +53,7 @@ static bool deferred_incoming; 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 = { @@ -71,6 +72,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_new(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; +} + /* * Called on -incoming with a defer: uri. * The migration can be started later after any parameters have been @@ -115,9 +138,14 @@ static void process_incoming_migration_co(void *opaque) Error *local_err = NULL; int ret; + migration_incoming_state_new(f); + ret = qemu_loadvm_state(f); + qemu_fclose(f); free_xbzrle_decoded_buf(); + migration_incoming_state_destroy(); + if (ret < 0) { error_report("load of migration failed: %s", strerror(-ret)); migrate_decompress_threads_join(); diff --git a/savevm.c b/savevm.c index d9f0cca..2aa2d19 100644 --- a/savevm.c +++ b/savevm.c @@ -1320,9 +1320,11 @@ int load_vmstate(const char *name) } qemu_system_reset(VMRESET_SILENT); + migration_incoming_state_new(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;