From patchwork Tue Mar 22 13:26:10 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Liguori X-Patchwork-Id: 87920 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 502C8B6F73 for ; Wed, 23 Mar 2011 00:45:51 +1100 (EST) Received: from localhost ([127.0.0.1]:52351 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q21u8-0007yS-UI for incoming@patchwork.ozlabs.org; Tue, 22 Mar 2011 09:45:48 -0400 Received: from [140.186.70.92] (port=56185 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q21lN-0002oC-8h for qemu-devel@nongnu.org; Tue, 22 Mar 2011 09:36:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q21bM-0005Jz-My for qemu-devel@nongnu.org; Tue, 22 Mar 2011 09:26:26 -0400 Received: from e39.co.us.ibm.com ([32.97.110.160]:58717) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q21bM-0005JV-GO for qemu-devel@nongnu.org; Tue, 22 Mar 2011 09:26:24 -0400 Received: from d03relay05.boulder.ibm.com (d03relay05.boulder.ibm.com [9.17.195.107]) by e39.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id p2MDDKea020394 for ; Tue, 22 Mar 2011 07:13:20 -0600 Received: from d03av04.boulder.ibm.com (d03av04.boulder.ibm.com [9.17.195.170]) by d03relay05.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p2MDQFZF052784 for ; Tue, 22 Mar 2011 07:26:19 -0600 Received: from d03av04.boulder.ibm.com (loopback [127.0.0.1]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p2MDQFw4023959 for ; Tue, 22 Mar 2011 07:26:15 -0600 Received: from [9.49.128.20] (sig-9-49-128-20.mts.ibm.com [9.49.128.20]) by d03av04.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p2MDQEVV023920; Tue, 22 Mar 2011 07:26:14 -0600 Message-ID: <4D88A372.9040808@us.ibm.com> Date: Tue, 22 Mar 2011 08:26:10 -0500 From: Anthony Liguori User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.14) Gecko/20110223 Lightning/1.0b2 Thunderbird/3.1.8 MIME-Version: 1.0 To: Jan Kiszka Subject: Re: Supsend/resume regression in c995b4 WAS: Re: [Qemu-devel] [PATCH] Fix migration uint8 arrys handled References: <1300200805-13928-1-git-send-email-quintela@redhat.com> <4D87EC8A.3010309@linux.vnet.ibm.com> <4D87FF80.6060300@us.ibm.com> <4D886BB6.80906@redhat.com> <4D8878BE.5070102@linux.vnet.ibm.com> <4D887CB3.6010505@redhat.com> <4D888CFF.5050204@linux.vnet.ibm.com> <4D888E7F.8040700@linux.vnet.ibm.com> <4D888F6A.1000009@siemens.com> In-Reply-To: <4D888F6A.1000009@siemens.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Received-From: 32.97.110.160 Cc: "qemu-devel@nongnu.org" , Juan Quintela , Avi Kivity , Stefan Berger X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org On 03/22/2011 07:00 AM, Jan Kiszka wrote: > We had a few migration related regressions recently. Do we have > sufficient test cases in autotest for them? Also for migrating from > older to the latest version? Autotest is too late and also not nearly rigorous enough for what you're trying to catch. Here's how I propose we tackle this. This patch adds a -dump-savevm option that takes a version. It spits out all of the fields we save for a particular version (well, not really, but it should). We also can add type information. The idea is that we'd write a simple test case (using gtester) that ran through and dumped the schema for each version. We'd store the schema's in the tree and the test can compare old schema's to the current schema to check for failure. This was thrown together in just a few minutes. I'll try to put together something more complete later today but I wanted to share this before the call at least. Regards, Anthony Liguori > Jan > From 43fb56c4ee68905d886ea21dad338f3e76350ba5 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Tue, 22 Mar 2011 08:21:00 -0500 Subject: [PATCH] vl: add -dump-savevm option to display VMState schema This can be used to verify whether the savevm schema has changed for a given version of the migration protocol. Signed-off-by: Anthony Liguori --- hw/hw.h | 2 ++ qemu-options.hx | 9 +++++++++ savevm.c | 22 ++++++++++++++++++++++ vl.c | 9 +++++++++ 4 files changed, 42 insertions(+), 0 deletions(-) diff --git a/hw/hw.h b/hw/hw.h index 1b09039..55816da 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -914,4 +914,6 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, int required_for_version); void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, void *opaque); +void vmstate_dump(FILE *f, int version); + #endif diff --git a/qemu-options.hx b/qemu-options.hx index badb730..801757b 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2349,6 +2349,15 @@ Specify a trace file to log output traces to. ETEXI #endif +DEF("dump-savevm", HAS_ARG, QEMU_OPTION_dump_savevm, + "-dump-savevm VERSION\n" + " dump the savevm schema for a given version\n", + QEMU_ARCH_ALL) +STEXI +@item -dump-savevm +@findex -dump-savevm +ETEXI + HXCOMM This is the last statement. Insert new options before this line! STEXI @end table diff --git a/savevm.c b/savevm.c index 03fce62..da1fea1 100644 --- a/savevm.c +++ b/savevm.c @@ -1436,6 +1436,28 @@ static void vmstate_save(QEMUFile *f, SaveStateEntry *se) vmstate_save_state(f,se->vmsd, se->opaque); } +void vmstate_dump(FILE *f, int version) +{ + SaveStateEntry *se; + bool first = true; + + QTAILQ_FOREACH(se, &savevm_handlers, entry) { + VMStateField *field; + if (!se->vmsd) { + continue; + } + if (first) { + first = false; + } else { + fprintf(f, "\n"); + } + fprintf(f, "%s.__version__ = %d\n", se->vmsd->name, se->version_id); + for (field = se->vmsd->fields; field->name; field++) { + fprintf(f, "%s.%s\n", se->vmsd->name, field->name); + } + } +} + #define QEMU_VM_FILE_MAGIC 0x5145564d #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 #define QEMU_VM_FILE_VERSION 0x00000003 diff --git a/vl.c b/vl.c index ac47211..361fcef 100644 --- a/vl.c +++ b/vl.c @@ -1941,6 +1941,7 @@ int main(int argc, char **argv, char **envp) int show_vnc_port = 0; int defconfig = 1; const char *trace_file = NULL; + int dump_savevm = -1; atexit(qemu_run_exit_notifiers); error_set_progname(argv[0]); @@ -2760,6 +2761,9 @@ int main(int argc, char **argv, char **envp) fclose(fp); break; } + case QEMU_OPTION_dump_savevm: + dump_savevm = atoi(optarg); + break; default: os_parse_cmd_args(popt->index, optarg); } @@ -3013,6 +3017,11 @@ int main(int argc, char **argv, char **envp) cpu_synchronize_all_post_init(); + if (dump_savevm != -1) { + vmstate_dump(stdout, dump_savevm); + exit(0); + } + /* must be after terminal init, SDL library changes signal handlers */ os_setup_signal_handling(); -- 1.7.0.4