From patchwork Wed Feb 17 16:05:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg Kurz X-Patchwork-Id: 584209 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 6F41E140291 for ; Thu, 18 Feb 2016 03:06:02 +1100 (AEDT) Received: from localhost ([::1]:59112 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aW4c4-0004U4-Gd for incoming@patchwork.ozlabs.org; Wed, 17 Feb 2016 11:06:00 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45816) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aW4bY-00043L-MY for qemu-devel@nongnu.org; Wed, 17 Feb 2016 11:05:30 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aW4bT-0002aR-EV for qemu-devel@nongnu.org; Wed, 17 Feb 2016 11:05:28 -0500 Received: from e06smtp17.uk.ibm.com ([195.75.94.113]:43652) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aW4bT-0002aE-4q for qemu-devel@nongnu.org; Wed, 17 Feb 2016 11:05:23 -0500 Received: from localhost by e06smtp17.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 17 Feb 2016 16:05:21 -0000 Received: from d06dlp02.portsmouth.uk.ibm.com (9.149.20.14) by e06smtp17.uk.ibm.com (192.168.101.147) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 17 Feb 2016 16:05:18 -0000 X-IBM-Helo: d06dlp02.portsmouth.uk.ibm.com X-IBM-MailFrom: gkurz@linux.vnet.ibm.com X-IBM-RcptTo: qemu-devel@nongnu.org;qemu-ppc@nongnu.org Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp02.portsmouth.uk.ibm.com (Postfix) with ESMTP id 45948219005F; Wed, 17 Feb 2016 16:05:03 +0000 (GMT) Received: from d06av05.portsmouth.uk.ibm.com (d06av05.portsmouth.uk.ibm.com [9.149.37.229]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u1HG5ICt32571534; Wed, 17 Feb 2016 16:05:18 GMT Received: from d06av05.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av05.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u1HG5HFT020504; Wed, 17 Feb 2016 09:05:17 -0700 Received: from smtp.lab.toulouse-stg.fr.ibm.com (srv01.lab.toulouse-stg.fr.ibm.com [9.101.4.1]) by d06av05.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id u1HG5HZL020490; Wed, 17 Feb 2016 09:05:17 -0700 Received: from bahia.huguette.org (sig-9-79-65-117.de.ibm.com [9.79.65.117]) by smtp.lab.toulouse-stg.fr.ibm.com (Postfix) with ESMTP id 4D363220413; Wed, 17 Feb 2016 17:05:16 +0100 (CET) From: Greg Kurz To: Juan Quintela Date: Wed, 17 Feb 2016 17:05:15 +0100 Message-ID: <20160217160350.840.2508.stgit@bahia.huguette.org> In-Reply-To: <20160217160344.840.69108.stgit@bahia.huguette.org> References: <20160217160344.840.69108.stgit@bahia.huguette.org> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16021716-0005-0000-0000-00000A65689E X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 195.75.94.113 Cc: Laurent Vivier , qemu-devel@nongnu.org, "Dr. David Alan Gilbert" , qemu-ppc@nongnu.org, Amit Shah , David Gibson Subject: [Qemu-devel] [PATCH v2 1/3] migration: allow configuration section to be optional 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 Since QEMU 2.4, the migration stream begins with a configuration section. It is known to break migration of pseries machine from older QEMU. It is possible to fix this in the pseries compat code but it will then break migration of old pseries from latest QEMU. As an alternative, this patch introduces a new machine property which allows to ignore the abscence of configuration section during incoming migration. It boils to adding: -machine require-config-section=off Using this property only makes sense when migrating from an older QEMU. It has no effect on outgoing migration. Suggested-by: Dr. David Alan Gilbert Reviewed-by: David Gibson Signed-off-by: Greg Kurz --- v2: - renamed property to require-config-section --- hw/core/machine.c | 22 ++++++++++++++++++++++ include/hw/boards.h | 1 + migration/savevm.c | 21 +++++++++++++++------ qemu-options.hx | 3 ++- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index 6d1a0d8eebc4..7203dd260bf2 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -312,6 +312,21 @@ static bool machine_get_suppress_vmdesc(Object *obj, Error **errp) return ms->suppress_vmdesc; } +static void machine_set_require_config_section(Object *obj, bool value, + Error **errp) +{ + MachineState *ms = MACHINE(obj); + + ms->require_config_section = value; +} + +static bool machine_get_require_config_section(Object *obj, Error **errp) +{ + MachineState *ms = MACHINE(obj); + + return ms->require_config_section; +} + static int error_on_sysbus_device(SysBusDevice *sbdev, void *opaque) { error_report("Option '-device %s' cannot be handled by this machine", @@ -365,6 +380,7 @@ static void machine_initfn(Object *obj) ms->kvm_shadow_mem = -1; ms->dump_guest_core = true; ms->mem_merge = true; + ms->require_config_section = true; object_property_add_str(obj, "accel", machine_get_accel, machine_set_accel, NULL); @@ -467,6 +483,12 @@ static void machine_initfn(Object *obj) object_property_set_description(obj, "suppress-vmdesc", "Set on to disable self-describing migration", NULL); + object_property_add_bool(obj, "require-config-section", + machine_get_require_config_section, + machine_set_require_config_section, NULL); + object_property_set_description(obj, "require-config-section", + "Set on/off to reject/accept migration without configuration section", + NULL); /* Register notifier when init is done for sysbus sanity checks */ ms->sysbus_notifier.notify = machine_init_notify; diff --git a/include/hw/boards.h b/include/hw/boards.h index 0f30959e2e3b..d6ff1ba4c260 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -128,6 +128,7 @@ struct MachineState { char *firmware; bool iommu; bool suppress_vmdesc; + bool require_config_section; ram_addr_t ram_size; ram_addr_t maxram_size; diff --git a/migration/savevm.c b/migration/savevm.c index 94f2894243ce..f8dee03a3350 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1847,6 +1847,12 @@ static int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis) return 0; } +static bool must_receive_configuration(void) +{ + MachineState *machine = MACHINE(qdev_get_machine()); + return machine->require_config_section; +} + int qemu_loadvm_state(QEMUFile *f) { MigrationIncomingState *mis = migration_incoming_get_current(); @@ -1876,15 +1882,18 @@ int qemu_loadvm_state(QEMUFile *f) } if (!savevm_state.skip_configuration) { - if (qemu_get_byte(f) != QEMU_VM_CONFIGURATION) { + if (qemu_peek_byte(f, 0) == QEMU_VM_CONFIGURATION) { + qemu_file_skip(f, 1); + ret = vmstate_load_state(f, &vmstate_configuration, &savevm_state, + 0); + + if (ret) { + return ret; + } + } else if (must_receive_configuration()) { error_report("Configuration section missing"); return -EINVAL; } - ret = vmstate_load_state(f, &vmstate_configuration, &savevm_state, 0); - - if (ret) { - return ret; - } } ret = qemu_loadvm_state_main(f, mis); diff --git a/qemu-options.hx b/qemu-options.hx index 2f0465eeb1d1..172471c75b1c 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -43,7 +43,8 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ " aes-key-wrap=on|off controls support for AES key wrapping (default=on)\n" " dea-key-wrap=on|off controls support for DEA key wrapping (default=on)\n" " suppress-vmdesc=on|off disables self-describing migration (default=off)\n" - " nvdimm=on|off controls NVDIMM support (default=off)\n", + " nvdimm=on|off controls NVDIMM support (default=off)\n" + " require-config-section=on|off incoming migration requires configuration section (default=on)\n", QEMU_ARCH_ALL) STEXI @item -machine [type=]@var{name}[,prop=@var{value}[,...]]