qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 00/22] migration queue
@ 2013-03-26 14:43 Juan Quintela
  0 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2013-03-26 14:43 UTC (permalink / raw)
  To: qemu-devel; +Cc: Anthony Liguori

Hi Anthony

This pull request include:

- Peter Lieven zero page optimizations
- David Gibson new VMSTATE macros
- Orit asynchronous writes.
- migration documentation (me)

All of them have had several rounds through qemu-devel@

Please, pull.

Later, Juan.


The following changes since commit dcadaa9b40d6019ac18d6fd7763d43048ef79218:

  Merge remote-tracking branch 'stefanha/net' into staging (2013-03-25 13:14:26 -0500)

are available in the git repository at:


  git://github.com/juanquintela/qemu.git migration.next

for you to fetch changes up to 500f0061d628b52220038939728f0d7aee634468:

  Use qemu_put_buffer_async for guest memory pages (2013-03-26 13:32:33 +0100)

----------------------------------------------------------------
David Gibson (5):
      savevm: Add VMSTATE_UINT64_EQUAL helpers
      savevm: Add VMSTATE_UINTTL_EQUAL helper
      savevm: Add VMSTATE_FLOAT64 helpers
      savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32
      savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition

Juan Quintela (1):
      migration: Improve QMP documentation

Orit Wasserman (7):
      Add QemuFileWritevBuffer QemuFileOps
      Add socket_writev_buffer function
      Update bytes_xfer in qemu_put_byte
      Store the data to send also in iovec
      Use writev ops if available
      Add qemu_put_buffer_async
      Use qemu_put_buffer_async for guest memory pages

Peter Lieven (9):
      move vector definitions to qemu-common.h
      cutils: add a function to find non-zero content in a buffer
      buffer_is_zero: use vector optimizations if possible
      bitops: unroll while loop in find_next_bit()
      migration: search for zero instead of dup pages
      migration: add an indicator for bulk state of ram migration
      migration: do not sent zero pages in bulk stage
      migration: do not search dirty pages in bulk stage
      migration: use XBZRLE only after bulk stage

 arch_init.c                   |  76 +++++++++++-----------
 hmp.c                         |   2 +
 hw/hw.h                       |   6 ++
 include/migration/migration.h |   2 +
 include/migration/qemu-file.h |  12 ++++
 include/migration/vmstate.h   |  43 +++++++++++--
 include/qemu-common.h         |  31 +++++++++
 migration.c                   |   3 +-
 qapi-schema.json              |   8 ++-
 qmp-commands.hx               |  55 +++++++++-------
 savevm.c                      | 146 +++++++++++++++++++++++++++++++++++++-----
 util/bitops.c                 |  18 +++++-
 util/cutils.c                 |  60 +++++++++++++++++
 13 files changed, 375 insertions(+), 87 deletions(-)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 00/22] Migration queue
@ 2014-06-24 13:09 Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 01/22] rdma: bug fixes Juan Quintela
                   ` (22 more replies)
  0 siblings, 23 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel

Hi

Peter, please pull:


- RDMA bugfixes (Michael)
- Static checker from Amit (v5)
- acked patches from vmstate (thanks Dave)

Later, Juan.


The following changes since commit d9c1647d896d3192cba9dbf98fb7efab876edde5:

  Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging (2014-06-23 12:55:22 +0100)

are available in the git repository at:


  git://github.com/juanquintela/qemu.git tags/migration/20140623

for you to fetch changes up to 4ea7df4e5c6b9d8b8a474680d6b1687fc8eacbac:

  vmstate: Refactor & increase tests for primitive types (2014-06-23 19:14:52 +0200)

----------------------------------------------------------------
migration/next for 20140623

----------------------------------------------------------------
Amit Shah (18):
      migration: dump vmstate info as a json file for static analysis
      vmstate-static-checker: script to validate vmstate changes
      tests: vmstate static checker: add dump1 and dump2 files
      tests: vmstate static checker: incompat machine types
      tests: vmstate static checker: add version error in main section
      tests: vmstate static checker: version mismatch inside a Description
      tests: vmstate static checker: minimum_version_id check
      tests: vmstate static checker: remove a section
      tests: vmstate static checker: remove a field
      tests: vmstate static checker: remove last field in a struct
      tests: vmstate static checker: change description name
      tests: vmstate static checker: remove Fields
      tests: vmstate static checker: remove Description
      tests: vmstate static checker: remove Description inside Fields
      tests: vmstate static checker: remove a subsection
      tests: vmstate static checker: remove Subsections
      tests: vmstate static checker: add substructure for usb-kbd for hid section
      tests: vmstate static checker: add size mismatch inside substructure

Juan Quintela (3):
      migration: Remove unneeded minimum_version_id_old
      vmstate: Return error in case of error
      vmstate: Refactor & increase tests for primitive types

Michael R. Hines (1):
      rdma: bug fixes

 hw/usb/hcd-ohci.c                            |    7 +-
 include/migration/vmstate.h                  |    2 +
 migration-rdma.c                             |   20 +-
 qemu-options.hx                              |   14 +
 savevm.c                                     |  139 +++
 scripts/vmstate-static-checker.py            |  345 ++++++++
 tests/test-vmstate.c                         |  273 ++++--
 tests/vmstate-static-checker-data/dump1.json | 1163 ++++++++++++++++++++++++++
 tests/vmstate-static-checker-data/dump2.json |  968 +++++++++++++++++++++
 vl.c                                         |   13 +
 vmstate.c                                    |    4 +
 11 files changed, 2872 insertions(+), 76 deletions(-)
 create mode 100755 scripts/vmstate-static-checker.py
 create mode 100644 tests/vmstate-static-checker-data/dump1.json
 create mode 100644 tests/vmstate-static-checker-data/dump2.json

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 01/22] rdma: bug fixes
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 02/22] migration: dump vmstate info as a json file for static analysis Juan Quintela
                   ` (21 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Michael R. Hines

From: "Michael R. Hines" <mrhines@us.ibm.com>

1. Fix small memory leak in parsing inet address from command line in data_init()
2. Fix ibv_post_send() return value check and pass error code back up correctly.
3. Fix rdma_destroy_qp() segfault after failure to connect to destination.

Reported-by: frank.yangjie@gmail.com
Reported-by: dgilbert@redhat.com
Signed-off-by: Michael R. Hines <mrhines@us.ibm.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration-rdma.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/migration-rdma.c b/migration-rdma.c
index f60749b..d99812c 100644
--- a/migration-rdma.c
+++ b/migration-rdma.c
@@ -1590,13 +1590,11 @@ static int qemu_rdma_post_send_control(RDMAContext *rdma, uint8_t *buf,
     }


-    if (ibv_post_send(rdma->qp, &send_wr, &bad_wr)) {
-        return -1;
-    }
+    ret = ibv_post_send(rdma->qp, &send_wr, &bad_wr);

-    if (ret < 0) {
+    if (ret > 0) {
         fprintf(stderr, "Failed to use post IB SEND for control!\n");
-        return ret;
+        return -ret;
     }

     ret = qemu_rdma_block_for_wrid(rdma, RDMA_WRID_SEND_CONTROL, NULL);
@@ -2238,10 +2236,6 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
         }
     }

-    if (rdma->qp) {
-        rdma_destroy_qp(rdma->cm_id);
-        rdma->qp = NULL;
-    }
     if (rdma->cq) {
         ibv_destroy_cq(rdma->cq);
         rdma->cq = NULL;
@@ -2259,6 +2253,10 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
         rdma->listen_id = NULL;
     }
     if (rdma->cm_id) {
+        if (rdma->qp) {
+            rdma_destroy_qp(rdma->cm_id);
+            rdma->qp = NULL;
+        }
         rdma_destroy_id(rdma->cm_id);
         rdma->cm_id = NULL;
     }
@@ -2513,8 +2511,10 @@ static void *qemu_rdma_data_init(const char *host_port, Error **errp)
         } else {
             ERROR(errp, "bad RDMA migration address '%s'", host_port);
             g_free(rdma);
-            return NULL;
+            rdma = NULL;
         }
+
+        qapi_free_InetSocketAddress(addr);
     }

     return rdma;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 02/22] migration: dump vmstate info as a json file for static analysis
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 01/22] rdma: bug fixes Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 03/22] vmstate-static-checker: script to validate vmstate changes Juan Quintela
                   ` (20 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

This commit adds a new command, '-dump-vmstate', that takes a filename
as an argument.  When executed, QEMU will dump the vmstate information
for the machine type it's invoked with to the file, and quit.

The JSON-format output can then be used to compare the vmstate info for
different QEMU versions, specifically to test whether live migration
would break due to changes in the vmstate data.

A Python script that compares the output of such JSON dumps is included
in the following commit.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 include/migration/vmstate.h |   2 +
 qemu-options.hx             |  14 +++++
 savevm.c                    | 139 ++++++++++++++++++++++++++++++++++++++++++++
 vl.c                        |  13 +++++
 4 files changed, 168 insertions(+)

diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index 799d2d0..71a8a95 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -788,4 +788,6 @@ int64_t self_announce_delay(int round)
     return 50 + (SELF_ANNOUNCE_ROUNDS - round - 1) * 100;
 }

+void dump_vmstate_json_to_file(FILE *out_fp);
+
 #endif
diff --git a/qemu-options.hx b/qemu-options.hx
index ca75760..ff76ad4 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3252,6 +3252,20 @@ STEXI
 prepend a timestamp to each log message.(default:on)
 ETEXI

+DEF("dump-vmstate", HAS_ARG, QEMU_OPTION_dump_vmstate,
+    "-dump-vmstate <file>\n"
+    "                Output vmstate information in JSON format to file.\n"
+    "                Use the scripts/vmstate-static-checker.py file to\n"
+    "                check for possible regressions in migration code\n"
+    "                by comparing two such vmstate dumps.",
+    QEMU_ARCH_ALL)
+STEXI
+@item -dump-vmstate @var{file}
+@findex -dump-vmstate
+Dump json-encoded vmstate information for current machine type to file
+in @var{file}
+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 6cbdaac..ba900d3 100644
--- a/savevm.c
+++ b/savevm.c
@@ -24,6 +24,7 @@

 #include "config-host.h"
 #include "qemu-common.h"
+#include "hw/boards.h"
 #include "hw/hw.h"
 #include "hw/qdev.h"
 #include "net/net.h"
@@ -240,6 +241,144 @@ static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
     QTAILQ_HEAD_INITIALIZER(savevm_handlers);
 static int global_section_id;

+static void dump_vmstate_vmsd(FILE *out_file,
+                              const VMStateDescription *vmsd, int indent,
+                              bool is_subsection);
+
+static void dump_vmstate_vmsf(FILE *out_file, const VMStateField *field,
+                              int indent)
+{
+    fprintf(out_file, "%*s{\n", indent, "");
+    indent += 2;
+    fprintf(out_file, "%*s\"field\": \"%s\",\n", indent, "", field->name);
+    fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "",
+            field->version_id);
+    fprintf(out_file, "%*s\"field_exists\": %s,\n", indent, "",
+            field->field_exists ? "true" : "false");
+    fprintf(out_file, "%*s\"size\": %zu", indent, "", field->size);
+    if (field->vmsd != NULL) {
+        fprintf(out_file, ",\n");
+        dump_vmstate_vmsd(out_file, field->vmsd, indent, false);
+    }
+    fprintf(out_file, "\n%*s}", indent - 2, "");
+}
+
+static void dump_vmstate_vmss(FILE *out_file,
+                              const VMStateSubsection *subsection,
+                              int indent)
+{
+    if (subsection->vmsd != NULL) {
+        dump_vmstate_vmsd(out_file, subsection->vmsd, indent, true);
+    }
+}
+
+static void dump_vmstate_vmsd(FILE *out_file,
+                              const VMStateDescription *vmsd, int indent,
+                              bool is_subsection)
+{
+    if (is_subsection) {
+        fprintf(out_file, "%*s{\n", indent, "");
+    } else {
+        fprintf(out_file, "%*s\"%s\": {\n", indent, "", "Description");
+    }
+    indent += 2;
+    fprintf(out_file, "%*s\"name\": \"%s\",\n", indent, "", vmsd->name);
+    fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "",
+            vmsd->version_id);
+    fprintf(out_file, "%*s\"minimum_version_id\": %d", indent, "",
+            vmsd->minimum_version_id);
+    if (vmsd->fields != NULL) {
+        const VMStateField *field = vmsd->fields;
+        bool first;
+
+        fprintf(out_file, ",\n%*s\"Fields\": [\n", indent, "");
+        first = true;
+        while (field->name != NULL) {
+            if (field->flags & VMS_MUST_EXIST) {
+                /* Ignore VMSTATE_VALIDATE bits; these don't get migrated */
+                field++;
+                continue;
+            }
+            if (!first) {
+                fprintf(out_file, ",\n");
+            }
+            dump_vmstate_vmsf(out_file, field, indent + 2);
+            field++;
+            first = false;
+        }
+        fprintf(out_file, "\n%*s]", indent, "");
+    }
+    if (vmsd->subsections != NULL) {
+        const VMStateSubsection *subsection = vmsd->subsections;
+        bool first;
+
+        fprintf(out_file, ",\n%*s\"Subsections\": [\n", indent, "");
+        first = true;
+        while (subsection->vmsd != NULL) {
+            if (!first) {
+                fprintf(out_file, ",\n");
+            }
+            dump_vmstate_vmss(out_file, subsection, indent + 2);
+            subsection++;
+            first = false;
+        }
+        fprintf(out_file, "\n%*s]", indent, "");
+    }
+    fprintf(out_file, "\n%*s}", indent - 2, "");
+}
+
+static void dump_machine_type(FILE *out_file)
+{
+    MachineClass *mc;
+
+    mc = MACHINE_GET_CLASS(current_machine);
+
+    fprintf(out_file, "  \"vmschkmachine\": {\n");
+    fprintf(out_file, "    \"Name\": \"%s\"\n", mc->name);
+    fprintf(out_file, "  },\n");
+}
+
+void dump_vmstate_json_to_file(FILE *out_file)
+{
+    GSList *list, *elt;
+    bool first;
+
+    fprintf(out_file, "{\n");
+    dump_machine_type(out_file);
+
+    first = true;
+    list = object_class_get_list(TYPE_DEVICE, true);
+    for (elt = list; elt; elt = elt->next) {
+        DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
+                                             TYPE_DEVICE);
+        const char *name;
+        int indent = 2;
+
+        if (!dc->vmsd) {
+            continue;
+        }
+
+        if (!first) {
+            fprintf(out_file, ",\n");
+        }
+        name = object_class_get_name(OBJECT_CLASS(dc));
+        fprintf(out_file, "%*s\"%s\": {\n", indent, "", name);
+        indent += 2;
+        fprintf(out_file, "%*s\"Name\": \"%s\",\n", indent, "", name);
+        fprintf(out_file, "%*s\"version_id\": %d,\n", indent, "",
+                dc->vmsd->version_id);
+        fprintf(out_file, "%*s\"minimum_version_id\": %d,\n", indent, "",
+                dc->vmsd->minimum_version_id);
+
+        dump_vmstate_vmsd(out_file, dc->vmsd, indent, false);
+
+        fprintf(out_file, "\n%*s}", indent - 2, "");
+        first = false;
+    }
+    fprintf(out_file, "\n}\n");
+    fclose(out_file);
+}
+
 static int calculate_new_instance_id(const char *idstr)
 {
     SaveStateEntry *se;
diff --git a/vl.c b/vl.c
index ab8f152..3288755 100644
--- a/vl.c
+++ b/vl.c
@@ -2935,6 +2935,7 @@ int main(int argc, char **argv, char **envp)
                                         1024 * 1024;
     ram_addr_t maxram_size = default_ram_size;
     uint64_t ram_slots = 0;
+    FILE *vmstate_dump_file = NULL;

     atexit(qemu_run_exit_notifiers);
     error_set_progname(argv[0]);
@@ -3944,6 +3945,13 @@ int main(int argc, char **argv, char **envp)
                 }
                 configure_msg(opts);
                 break;
+            case QEMU_OPTION_dump_vmstate:
+                vmstate_dump_file = fopen(optarg, "w");
+                if (vmstate_dump_file == NULL) {
+                    fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
+                    exit(1);
+                }
+                break;
             default:
                 os_parse_cmd_args(popt->index, optarg);
             }
@@ -4495,6 +4503,11 @@ int main(int argc, char **argv, char **envp)
     }

     qdev_prop_check_global();
+    if (vmstate_dump_file) {
+        /* dump and exit */
+        dump_vmstate_json_to_file(vmstate_dump_file);
+        return 0;
+    }

     if (incoming) {
         Error *local_err = NULL;
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 03/22] vmstate-static-checker: script to validate vmstate changes
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 01/22] rdma: bug fixes Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 02/22] migration: dump vmstate info as a json file for static analysis Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 04/22] tests: vmstate static checker: add dump1 and dump2 files Juan Quintela
                   ` (19 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

This script compares the vmstate dumps in JSON format as output by QEMU
with the -dump-vmstate option.

It flags various errors, like version mismatch, sections going away,
size mismatches, etc.

This script is tolerant of a few changes that do not change the on-wire
format, like embedding a few fields within substructs.

The script takes -s/--src and -d/--dest parameters, to which filenames
are given as arguments.

Example:

(in a qemu 2.0 tree):
./x86_64-softmmu/qemu-system-x86_64 -dump-vmstate qemu-2.0.json

(in a qemu 2.2 tree:)
./x86_64-softmmu/qemu-system-x86_64 -dump-vmstate -M pc-i440fx-2.0 \
   qemu-2.2-m2.0.json

./scripts/vmstate-static-checker.py -s qemu-2.0.json -d qemu-2.2-m2.0.json

The script also takes a --reverse parameter to switch the src and dest
jsons.  This is just a shorthand for reversing the src and dest.

The --help parameter shows usage information.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 scripts/vmstate-static-checker.py | 345 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 345 insertions(+)
 create mode 100755 scripts/vmstate-static-checker.py

diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py
new file mode 100755
index 0000000..1604e68
--- /dev/null
+++ b/scripts/vmstate-static-checker.py
@@ -0,0 +1,345 @@
+#!/usr/bin/python
+#
+# Compares vmstate information stored in JSON format, obtained from
+# the -dump-vmstate QEMU command.
+#
+# Copyright 2014 Amit Shah <amit.shah@redhat.com>
+# Copyright 2014 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, see <http://www.gnu.org/licenses/>.
+
+import argparse
+import json
+import sys
+
+# Count the number of errors found
+taint = 0
+
+def bump_taint():
+    global taint
+
+    # Ensure we don't wrap around or reset to 0 -- the shell only has
+    # an 8-bit return value.
+    if taint < 255:
+        taint = taint + 1
+
+
+def check_fields_match(name, s_field, d_field):
+    if s_field == d_field:
+        return True
+
+    # Some fields changed names between qemu versions.  This list
+    # is used to whitelist such changes in each section / description.
+    changed_names = {
+        'e1000': ['dev', 'parent_obj'],
+        'ehci': ['dev', 'pcidev'],
+        'I440FX': ['dev', 'parent_obj'],
+        'ich9_ahci': ['card', 'parent_obj'],
+        'ioh-3240-express-root-port': ['port.br.dev',
+                                       'parent_obj.parent_obj.parent_obj',
+                                       'port.br.dev.exp.aer_log',
+                                'parent_obj.parent_obj.parent_obj.exp.aer_log'],
+        'mch': ['d', 'parent_obj'],
+        'pci_bridge': ['bridge.dev', 'parent_obj', 'bridge.dev.shpc', 'shpc'],
+        'pcnet': ['pci_dev', 'parent_obj'],
+        'PIIX3': ['pci_irq_levels', 'pci_irq_levels_vmstate'],
+        'piix4_pm': ['dev', 'parent_obj', 'pci0_status',
+                     'acpi_pci_hotplug.acpi_pcihp_pci_status[0x0]'],
+        'rtl8139': ['dev', 'parent_obj'],
+        'qxl': ['num_surfaces', 'ssd.num_surfaces'],
+        'usb-host': ['dev', 'parent_obj'],
+        'usb-mouse': ['usb-ptr-queue', 'HIDPointerEventQueue'],
+        'usb-tablet': ['usb-ptr-queue', 'HIDPointerEventQueue'],
+        'xhci': ['pci_dev', 'parent_obj'],
+        'xio3130-express-downstream-port': ['port.br.dev',
+                                            'parent_obj.parent_obj.parent_obj',
+                                            'port.br.dev.exp.aer_log',
+                                'parent_obj.parent_obj.parent_obj.exp.aer_log'],
+        'xio3130-express-upstream-port': ['br.dev', 'parent_obj.parent_obj',
+                                          'br.dev.exp.aer_log',
+                                          'parent_obj.parent_obj.exp.aer_log'],
+    }
+
+    if not name in changed_names:
+        return False
+
+    if s_field in changed_names[name] and d_field in changed_names[name]:
+        return True
+
+    return False
+
+
+def exists_in_substruct(fields, item):
+    # Some QEMU versions moved a few fields inside a substruct.  This
+    # kept the on-wire format the same.  This function checks if
+    # something got shifted inside a substruct.  For example, the
+    # change in commit 1f42d22233b4f3d1a2933ff30e8d6a6d9ee2d08f
+
+    if not "Description" in fields:
+        return False
+
+    if not "Fields" in fields["Description"]:
+        return False
+
+    substruct_fields = fields["Description"]["Fields"]
+
+    if substruct_fields == []:
+        return False
+
+    return check_fields_match(fields["Description"]["name"],
+                              substruct_fields[0]["field"], item)
+
+
+def check_fields(src_fields, dest_fields, desc, sec):
+    # This function checks for all the fields in a section.  If some
+    # fields got embedded into a substruct, this function will also
+    # attempt to check inside the substruct.
+
+    d_iter = iter(dest_fields)
+    s_iter = iter(src_fields)
+
+    # Using these lists as stacks to store previous value of s_iter
+    # and d_iter, so that when time comes to exit out of a substruct,
+    # we can go back one level up and continue from where we left off.
+
+    s_iter_list = []
+    d_iter_list = []
+
+    advance_src = True
+    advance_dest = True
+
+    while True:
+        if advance_src:
+            try:
+                s_item = s_iter.next()
+            except StopIteration:
+                if s_iter_list == []:
+                    break
+
+                s_iter = s_iter_list.pop()
+                continue
+        else:
+            # We want to avoid advancing just once -- when entering a
+            # dest substruct, or when exiting one.
+            advance_src = True
+
+        if advance_dest:
+            try:
+                d_item = d_iter.next()
+            except StopIteration:
+                if d_iter_list == []:
+                    # We were not in a substruct
+                    print "Section \"" + sec + "\",",
+                    print "Description " + "\"" + desc + "\":",
+                    print "expected field \"" + s_item["field"] + "\",",
+                    print "while dest has no further fields"
+                    bump_taint()
+                    break
+
+                d_iter = d_iter_list.pop()
+                advance_src = False
+                continue
+        else:
+            advance_dest = True
+
+        if not check_fields_match(desc, s_item["field"], d_item["field"]):
+            # Some fields were put in substructs, keeping the
+            # on-wire format the same, but breaking static tools
+            # like this one.
+
+            # First, check if dest has a new substruct.
+            if exists_in_substruct(d_item, s_item["field"]):
+                # listiterators don't have a prev() function, so we
+                # have to store our current location, descend into the
+                # substruct, and ensure we come out as if nothing
+                # happened when the substruct is over.
+                #
+                # Essentially we're opening the substructs that got
+                # added which didn't change the wire format.
+                d_iter_list.append(d_iter)
+                substruct_fields = d_item["Description"]["Fields"]
+                d_iter = iter(substruct_fields)
+                advance_src = False
+                continue
+
+            # Next, check if src has substruct that dest removed
+            # (can happen in backward migration: 2.0 -> 1.5)
+            if exists_in_substruct(s_item, d_item["field"]):
+                s_iter_list.append(s_iter)
+                substruct_fields = s_item["Description"]["Fields"]
+                s_iter = iter(substruct_fields)
+                advance_dest = False
+                continue
+
+            print "Section \"" + sec + "\",",
+            print "Description \"" + desc + "\":",
+            print "expected field \"" + s_item["field"] + "\",",
+            print "got \"" + d_item["field"] + "\"; skipping rest"
+            bump_taint()
+            break
+
+        check_version(s_item, d_item, sec, desc)
+
+        if not "Description" in s_item:
+            # Check size of this field only if it's not a VMSTRUCT entry
+            check_size(s_item, d_item, sec, desc, s_item["field"])
+
+        check_description_in_list(s_item, d_item, sec, desc)
+
+
+def check_subsections(src_sub, dest_sub, desc, sec):
+    for s_item in src_sub:
+        found = False
+        for d_item in dest_sub:
+            if s_item["name"] != d_item["name"]:
+                continue
+
+            found = True
+            check_descriptions(s_item, d_item, sec)
+
+        if not found:
+            print "Section \"" + sec + "\", Description \"" + desc + "\":",
+            print "Subsection \"" + s_item["name"] + "\" not found"
+            bump_taint()
+
+
+def check_description_in_list(s_item, d_item, sec, desc):
+    if not "Description" in s_item:
+        return
+
+    if not "Description" in d_item:
+        print "Section \"" + sec + "\", Description \"" + desc + "\",",
+        print "Field \"" + s_item["field"] + "\": missing description"
+        bump_taint()
+        return
+
+    check_descriptions(s_item["Description"], d_item["Description"], sec)
+
+
+def check_descriptions(src_desc, dest_desc, sec):
+    check_version(src_desc, dest_desc, sec, src_desc["name"])
+
+    if not check_fields_match(sec, src_desc["name"], dest_desc["name"]):
+        print "Section \"" + sec + "\":",
+        print "Description \"" + src_desc["name"] + "\"",
+        print "missing, got \"" + dest_desc["name"] + "\" instead; skipping"
+        bump_taint()
+        return
+
+    for f in src_desc:
+        if not f in dest_desc:
+            print "Section \"" + sec + "\"",
+            print "Description \"" + src_desc["name"] + "\":",
+            print "Entry \"" + f + "\" missing"
+            bump_taint()
+            continue
+
+        if f == 'Fields':
+            check_fields(src_desc[f], dest_desc[f], src_desc["name"], sec)
+
+        if f == 'Subsections':
+            check_subsections(src_desc[f], dest_desc[f], src_desc["name"], sec)
+
+
+def check_version(s, d, sec, desc=None):
+    if s["version_id"] > d["version_id"]:
+        print "Section \"" + sec + "\"",
+        if desc:
+            print "Description \"" + desc + "\":",
+        print "version error:", s["version_id"], ">", d["version_id"]
+        bump_taint()
+
+    if not "minimum_version_id" in d:
+        return
+
+    if s["version_id"] < d["minimum_version_id"]:
+        print "Section \"" + sec + "\"",
+        if desc:
+            print "Description \"" + desc + "\":",
+            print "minimum version error:", s["version_id"], "<",
+            print d["minimum_version_id"]
+            bump_taint()
+
+
+def check_size(s, d, sec, desc=None, field=None):
+    if s["size"] != d["size"]:
+        print "Section \"" + sec + "\"",
+        if desc:
+            print "Description \"" + desc + "\"",
+        if field:
+            print "Field \"" + field + "\"",
+        print "size mismatch:", s["size"], ",", d["size"]
+        bump_taint()
+
+
+def check_machine_type(s, d):
+    if s["Name"] != d["Name"]:
+        print "Warning: checking incompatible machine types:",
+        print "\"" + s["Name"] + "\", \"" + d["Name"] + "\""
+    return
+
+
+def main():
+    help_text = "Parse JSON-formatted vmstate dumps from QEMU in files SRC and DEST.  Checks whether migration from SRC to DEST QEMU versions would break based on the VMSTATE information contained within the JSON outputs.  The JSON output is created from a QEMU invocation with the -dump-vmstate parameter and a filename argument to it.  Other parameters to QEMU do not matter, except the -M (machine type) parameter."
+
+    parser = argparse.ArgumentParser(description=help_text)
+    parser.add_argument('-s', '--src', type=file, required=True,
+                        help='json dump from src qemu')
+    parser.add_argument('-d', '--dest', type=file, required=True,
+                        help='json dump from dest qemu')
+    parser.add_argument('--reverse', required=False, default=False,
+                        action='store_true',
+                        help='reverse the direction')
+    args = parser.parse_args()
+
+    src_data = json.load(args.src)
+    dest_data = json.load(args.dest)
+    args.src.close()
+    args.dest.close()
+
+    if args.reverse:
+        temp = src_data
+        src_data = dest_data
+        dest_data = temp
+
+    for sec in src_data:
+        if not sec in dest_data:
+            print "Section \"" + sec + "\" does not exist in dest"
+            bump_taint()
+            continue
+
+        s = src_data[sec]
+        d = dest_data[sec]
+
+        if sec == "vmschkmachine":
+            check_machine_type(s, d)
+            continue
+
+        check_version(s, d, sec)
+
+        for entry in s:
+            if not entry in d:
+                print "Section \"" + sec + "\": Entry \"" + entry + "\"",
+                print "missing"
+                bump_taint()
+                continue
+
+            if entry == "Description":
+                check_descriptions(s[entry], d[entry], sec)
+
+    return taint
+
+
+if __name__ == '__main__':
+    sys.exit(main())
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 04/22] tests: vmstate static checker: add dump1 and dump2 files
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (2 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 03/22] vmstate-static-checker: script to validate vmstate changes Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 05/22] tests: vmstate static checker: incompat machine types Juan Quintela
                   ` (18 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

These are stripped-down JSON data as obtained from the -dump-vmstate
option.  The two files are identical in this commit, and will be
modified in the later commits to show what the script does with the
data.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump1.json | 1163 ++++++++++++++++++++++++++
 tests/vmstate-static-checker-data/dump2.json | 1163 ++++++++++++++++++++++++++
 2 files changed, 2326 insertions(+)
 create mode 100644 tests/vmstate-static-checker-data/dump1.json
 create mode 100644 tests/vmstate-static-checker-data/dump2.json

diff --git a/tests/vmstate-static-checker-data/dump1.json b/tests/vmstate-static-checker-data/dump1.json
new file mode 100644
index 0000000..44200fb
--- /dev/null
+++ b/tests/vmstate-static-checker-data/dump1.json
@@ -0,0 +1,1163 @@
+{
+  "vmschkmachine": {
+    "Name": "pc-i440fx-2.1"
+  },
+  "fw_cfg": {
+    "Name": "fw_cfg",
+    "version_id": 2,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "fw_cfg",
+      "version_id": 2,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "cur_entry",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "cur_offset",
+          "version_id": 0,
+          "field_exists": true,
+          "size": 4
+        },
+        {
+          "field": "cur_offset",
+          "version_id": 2,
+          "field_exists": false,
+          "size": 4
+        }
+      ]
+    }
+  },
+  "fusbh200-ehci-usb": {
+    "Name": "fusbh200-ehci-usb",
+    "version_id": 2,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "ehci-sysbus",
+      "version_id": 2,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "ehci",
+          "version_id": 2,
+          "field_exists": false,
+          "size": 1880,
+          "Description": {
+            "name": "ehci-core",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "usbcmd",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts_pending",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts_frindex",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbintr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "frindex",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "ctrldssegment",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "periodiclistbase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "asynclistaddr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "configflag",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[0]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[1]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[2]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[3]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[4]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[5]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "frame_timer",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 8
+              },
+              {
+                "field": "last_run_ns",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 8
+              },
+              {
+                "field": "async_stepdown",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "astate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "pstate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "a_fetch_addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "p_fetch_addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              }
+            ]
+          }
+        }
+      ]
+    }
+  },
+  "pci-serial-4x": {
+    "Name": "pci-serial-4x",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "pci-serial-multi",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 368,
+          "Description": {
+            "name": "serial",
+            "version_id": 3,
+            "minimum_version_id": 2,
+            "Fields": [
+              {
+                "field": "divider",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 2
+              },
+              {
+                "field": "rbr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "ier",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "iir",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lcr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "mcr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lsr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "msr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "scr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "fcr_vmstate",
+                "version_id": 3,
+                "field_exists": false,
+                "size": 1
+              }
+            ]
+          }
+        },
+        {
+          "field": "level",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        }
+      ]
+    }
+  },
+  "intel-hda-generic": {
+    "Name": "intel-hda-generic",
+    "version_id": 1,
+    "minimum_version_id": 0,
+    "Description": {
+      "name": "intel-hda",
+      "version_id": 1,
+      "minimum_version_id": 0,
+      "Fields": [
+        {
+          "field": "pci",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "g_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wake_en",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "state_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "int_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "int_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wall_clk",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_rp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_wp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_size",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_wp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_cnt",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_size",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "dp_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "dp_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "icw",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "irr",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "ics",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "st",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 56,
+          "Description": {
+            "name": "intel-hda-stream",
+            "version_id": 1,
+            "minimum_version_id": 0,
+            "Fields": [
+              {
+                "field": "ctl",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "lpib",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "cbl",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "lvi",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "fmt",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "bdlp_lbase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "bdlp_ubase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              }
+            ]
+          }
+        },
+        {
+          "field": "rirb_count",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wall_base_ns",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "cfi.pflash01": {
+    "Name": "cfi.pflash01",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "pflash_cfi01",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "wcycle",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "cmd",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "status",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "counter",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "megasas": {
+    "Name": "megasas",
+    "version_id": 0,
+    "minimum_version_id": 0,
+    "Description": {
+      "name": "megasas",
+      "version_id": 0,
+      "minimum_version_id": 0,
+      "Fields": [
+        {
+          "field": "parent_obj",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "fw_state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "intr_mask",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "doorbell",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "reply_queue_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        },
+        {
+          "field": "consumer_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        },
+        {
+          "field": "producer_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "PIIX3-xen": {
+    "Name": "PIIX3-xen",
+    "version_id": 3,
+    "minimum_version_id": 2,
+    "Description": {
+      "name": "PIIX3",
+      "version_id": 3,
+      "minimum_version_id": 2,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "pci_irq_levels_vmstate",
+          "version_id": 3,
+          "field_exists": false,
+          "size": 4
+        }
+      ],
+      "Subsections": [
+        {
+          "name": "PIIX3/rcr",
+          "version_id": 1,
+          "minimum_version_id": 1,
+          "Fields": [
+            {
+              "field": "rcr",
+              "version_id": 0,
+              "field_exists": false,
+              "size": 1
+            }
+          ]
+        }
+      ]
+    }
+  },
+  "tpci200": {
+    "Name": "tpci200",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "tpci200",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "big_endian",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "ctrl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "status",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "int_set",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        }
+      ]
+    }
+  },
+  "SUNW,fdtwo": {
+    "Name": "SUNW,fdtwo",
+    "version_id": 2,
+    "minimum_version_id": 2,
+    "Description": {
+      "name": "fdc",
+      "version_id": 2,
+      "minimum_version_id": 2,
+      "Fields": [
+        {
+          "field": "state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 360,
+          "Description": {
+            "name": "fdc",
+            "version_id": 2,
+            "minimum_version_id": 2,
+            "Fields": [
+              {
+                "field": "sra",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "srb",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "dor_vmstate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "tdr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "dsr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "msr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status0",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status1",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status2",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "fifo",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "data_pos",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "data_len",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "data_state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "data_dir",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "eot",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "timer0",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "timer1",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "precomp_trk",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lock",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "pwrd",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "num_floppies",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "drives",
+                "version_id": 1,
+                "field_exists": false,
+                "size": 40,
+                "Description": {
+                  "name": "fdrive",
+                  "version_id": 1,
+                  "minimum_version_id": 1,
+                  "Fields": [
+                    {
+                      "field": "head",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    },
+                    {
+                      "field": "track",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    },
+                    {
+                      "field": "sect",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    }
+                  ],
+                  "Subsections": [
+                    {
+                      "name": "fdrive/media_changed",
+                      "version_id": 1,
+                      "minimum_version_id": 1,
+                      "Fields": [
+                        {
+                          "field": "media_changed",
+                          "version_id": 0,
+                          "field_exists": false,
+                          "size": 1
+                        }
+                      ]
+                    },
+                    {
+                      "name": "fdrive/media_rate",
+                      "version_id": 1,
+                      "minimum_version_id": 1,
+                      "Fields": [
+                        {
+                          "field": "media_rate",
+                          "version_id": 0,
+                          "field_exists": false,
+                          "size": 1
+                        }
+                      ]
+                    }
+                  ]
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  },
+  "usb-kbd": {
+    "Name": "usb-kbd",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "usb-kbd",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4352,
+          "Description": {
+            "name": "USBDevice",
+            "version_id": 1,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "remote_wakeup",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_len",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_index",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_buf",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              }
+            ]
+          }
+        },
+        {
+          "field": "kbd.keycodes",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "head",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "n",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "kbd.modifiers",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "kbd.leds",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "kbd.key",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "kbd.keys",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "protocol",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "idle",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        }
+      ]
+    }
+  }
+}
diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
new file mode 100644
index 0000000..44200fb
--- /dev/null
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -0,0 +1,1163 @@
+{
+  "vmschkmachine": {
+    "Name": "pc-i440fx-2.1"
+  },
+  "fw_cfg": {
+    "Name": "fw_cfg",
+    "version_id": 2,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "fw_cfg",
+      "version_id": 2,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "cur_entry",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "cur_offset",
+          "version_id": 0,
+          "field_exists": true,
+          "size": 4
+        },
+        {
+          "field": "cur_offset",
+          "version_id": 2,
+          "field_exists": false,
+          "size": 4
+        }
+      ]
+    }
+  },
+  "fusbh200-ehci-usb": {
+    "Name": "fusbh200-ehci-usb",
+    "version_id": 2,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "ehci-sysbus",
+      "version_id": 2,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "ehci",
+          "version_id": 2,
+          "field_exists": false,
+          "size": 1880,
+          "Description": {
+            "name": "ehci-core",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "usbcmd",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts_pending",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbsts_frindex",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "usbintr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "frindex",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "ctrldssegment",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "periodiclistbase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "asynclistaddr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "configflag",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[0]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[1]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[2]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[3]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[4]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "portsc[5]",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "frame_timer",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 8
+              },
+              {
+                "field": "last_run_ns",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 8
+              },
+              {
+                "field": "async_stepdown",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "astate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "pstate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "a_fetch_addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "p_fetch_addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              }
+            ]
+          }
+        }
+      ]
+    }
+  },
+  "pci-serial-4x": {
+    "Name": "pci-serial-4x",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "pci-serial-multi",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 368,
+          "Description": {
+            "name": "serial",
+            "version_id": 3,
+            "minimum_version_id": 2,
+            "Fields": [
+              {
+                "field": "divider",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 2
+              },
+              {
+                "field": "rbr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "ier",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "iir",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lcr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "mcr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lsr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "msr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "scr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "fcr_vmstate",
+                "version_id": 3,
+                "field_exists": false,
+                "size": 1
+              }
+            ]
+          }
+        },
+        {
+          "field": "level",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        }
+      ]
+    }
+  },
+  "intel-hda-generic": {
+    "Name": "intel-hda-generic",
+    "version_id": 1,
+    "minimum_version_id": 0,
+    "Description": {
+      "name": "intel-hda",
+      "version_id": 1,
+      "minimum_version_id": 0,
+      "Fields": [
+        {
+          "field": "pci",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "g_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wake_en",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "state_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "int_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "int_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wall_clk",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_rp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_wp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "corb_size",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_wp",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_cnt",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_ctl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_sts",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "rirb_size",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "dp_lbase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "dp_ubase",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "icw",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "irr",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "ics",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "st",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 56,
+          "Description": {
+            "name": "intel-hda-stream",
+            "version_id": 1,
+            "minimum_version_id": 0,
+            "Fields": [
+              {
+                "field": "ctl",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "lpib",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "cbl",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "lvi",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "fmt",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "bdlp_lbase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "bdlp_ubase",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              }
+            ]
+          }
+        },
+        {
+          "field": "rirb_count",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "wall_base_ns",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "cfi.pflash01": {
+    "Name": "cfi.pflash01",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "pflash_cfi01",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "wcycle",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "cmd",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "status",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "counter",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "megasas": {
+    "Name": "megasas",
+    "version_id": 0,
+    "minimum_version_id": 0,
+    "Description": {
+      "name": "megasas",
+      "version_id": 0,
+      "minimum_version_id": 0,
+      "Fields": [
+        {
+          "field": "parent_obj",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "fw_state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "intr_mask",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "doorbell",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "reply_queue_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        },
+        {
+          "field": "consumer_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        },
+        {
+          "field": "producer_pa",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 8
+        }
+      ]
+    }
+  },
+  "PIIX3-xen": {
+    "Name": "PIIX3-xen",
+    "version_id": 3,
+    "minimum_version_id": 2,
+    "Description": {
+      "name": "PIIX3",
+      "version_id": 3,
+      "minimum_version_id": 2,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "pci_irq_levels_vmstate",
+          "version_id": 3,
+          "field_exists": false,
+          "size": 4
+        }
+      ],
+      "Subsections": [
+        {
+          "name": "PIIX3/rcr",
+          "version_id": 1,
+          "minimum_version_id": 1,
+          "Fields": [
+            {
+              "field": "rcr",
+              "version_id": 0,
+              "field_exists": false,
+              "size": 1
+            }
+          ]
+        }
+      ]
+    }
+  },
+  "tpci200": {
+    "Name": "tpci200",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "tpci200",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1944,
+          "Description": {
+            "name": "PCIDevice",
+            "version_id": 2,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "version_id",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 256
+              },
+              {
+                "field": "irq_state",
+                "version_id": 2,
+                "field_exists": false,
+                "size": 16
+              }
+            ]
+          }
+        },
+        {
+          "field": "big_endian",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "ctrl",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "status",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "int_set",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        }
+      ]
+    }
+  },
+  "SUNW,fdtwo": {
+    "Name": "SUNW,fdtwo",
+    "version_id": 2,
+    "minimum_version_id": 2,
+    "Description": {
+      "name": "fdc",
+      "version_id": 2,
+      "minimum_version_id": 2,
+      "Fields": [
+        {
+          "field": "state",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 360,
+          "Description": {
+            "name": "fdc",
+            "version_id": 2,
+            "minimum_version_id": 2,
+            "Fields": [
+              {
+                "field": "sra",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "srb",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "dor_vmstate",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "tdr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "dsr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "msr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status0",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status1",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "status2",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "fifo",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "data_pos",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "data_len",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "data_state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "data_dir",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "eot",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "timer0",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "timer1",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "precomp_trk",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "config",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "lock",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "pwrd",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "num_floppies",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "drives",
+                "version_id": 1,
+                "field_exists": false,
+                "size": 40,
+                "Description": {
+                  "name": "fdrive",
+                  "version_id": 1,
+                  "minimum_version_id": 1,
+                  "Fields": [
+                    {
+                      "field": "head",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    },
+                    {
+                      "field": "track",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    },
+                    {
+                      "field": "sect",
+                      "version_id": 0,
+                      "field_exists": false,
+                      "size": 1
+                    }
+                  ],
+                  "Subsections": [
+                    {
+                      "name": "fdrive/media_changed",
+                      "version_id": 1,
+                      "minimum_version_id": 1,
+                      "Fields": [
+                        {
+                          "field": "media_changed",
+                          "version_id": 0,
+                          "field_exists": false,
+                          "size": 1
+                        }
+                      ]
+                    },
+                    {
+                      "name": "fdrive/media_rate",
+                      "version_id": 1,
+                      "minimum_version_id": 1,
+                      "Fields": [
+                        {
+                          "field": "media_rate",
+                          "version_id": 0,
+                          "field_exists": false,
+                          "size": 1
+                        }
+                      ]
+                    }
+                  ]
+                }
+              }
+            ]
+          }
+        }
+      ]
+    }
+  },
+  "usb-kbd": {
+    "Name": "usb-kbd",
+    "version_id": 1,
+    "minimum_version_id": 1,
+    "Description": {
+      "name": "usb-kbd",
+      "version_id": 1,
+      "minimum_version_id": 1,
+      "Fields": [
+        {
+          "field": "dev",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4352,
+          "Description": {
+            "name": "USBDevice",
+            "version_id": 1,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "addr",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "remote_wakeup",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_state",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_len",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_index",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "setup_buf",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              }
+            ]
+          }
+        },
+        {
+          "field": "kbd.keycodes",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "head",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "n",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "kbd.modifiers",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 2
+        },
+        {
+          "field": "kbd.leds",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "kbd.key",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        },
+        {
+          "field": "kbd.keys",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "protocol",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 4
+        },
+        {
+          "field": "idle",
+          "version_id": 0,
+          "field_exists": false,
+          "size": 1
+        }
+      ]
+    }
+  }
+}
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 05/22] tests: vmstate static checker: incompat machine types
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (3 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 04/22] tests: vmstate static checker: add dump1 and dump2 files Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 06/22] tests: vmstate static checker: add version error in main section Juan Quintela
                   ` (17 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

This commit modifies the dump2 data to flag incompatibilities in the
machine types being compared.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 44200fb..0a8b81d 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -1,6 +1,6 @@
 {
   "vmschkmachine": {
-    "Name": "pc-i440fx-2.1"
+    "Name": "pc-i440fx-2.2"
   },
   "fw_cfg": {
     "Name": "fw_cfg",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 06/22] tests: vmstate static checker: add version error in main section
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (4 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 05/22] tests: vmstate static checker: incompat machine types Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 07/22] tests: vmstate static checker: version mismatch inside a Description Juan Quintela
                   ` (16 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 0a8b81d..f405534 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -34,7 +34,7 @@
   },
   "fusbh200-ehci-usb": {
     "Name": "fusbh200-ehci-usb",
-    "version_id": 2,
+    "version_id": 1,
     "minimum_version_id": 1,
     "Description": {
       "name": "ehci-sysbus",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 07/22] tests: vmstate static checker: version mismatch inside a Description
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (5 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 06/22] tests: vmstate static checker: add version error in main section Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 08/22] tests: vmstate static checker: minimum_version_id check Juan Quintela
                   ` (15 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index f405534..36a9b4b 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -829,7 +829,7 @@
     "minimum_version_id": 2,
     "Description": {
       "name": "fdc",
-      "version_id": 2,
+      "version_id": 1,
       "minimum_version_id": 2,
       "Fields": [
         {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 08/22] tests: vmstate static checker: minimum_version_id check
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (6 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 07/22] tests: vmstate static checker: version mismatch inside a Description Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:09 ` [Qemu-devel] [PULL 09/22] tests: vmstate static checker: remove a section Juan Quintela
                   ` (14 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump1.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump1.json b/tests/vmstate-static-checker-data/dump1.json
index 44200fb..786ca0b 100644
--- a/tests/vmstate-static-checker-data/dump1.json
+++ b/tests/vmstate-static-checker-data/dump1.json
@@ -698,7 +698,7 @@
     "minimum_version_id": 2,
     "Description": {
       "name": "PIIX3",
-      "version_id": 3,
+      "version_id": 1,
       "minimum_version_id": 2,
       "Fields": [
         {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 09/22] tests: vmstate static checker: remove a section
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (7 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 08/22] tests: vmstate static checker: minimum_version_id check Juan Quintela
@ 2014-06-24 13:09 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 10/22] tests: vmstate static checker: remove a field Juan Quintela
                   ` (13 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:09 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 36a9b4b..4ccfd67 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -2,7 +2,7 @@
   "vmschkmachine": {
     "Name": "pc-i440fx-2.2"
   },
-  "fw_cfg": {
+  "fw_cfg2": {
     "Name": "fw_cfg",
     "version_id": 2,
     "minimum_version_id": 1,
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 10/22] tests: vmstate static checker: remove a field
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (8 preceding siblings ...)
  2014-06-24 13:09 ` [Qemu-devel] [PULL 09/22] tests: vmstate static checker: remove a section Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 11/22] tests: vmstate static checker: remove last field in a struct Juan Quintela
                   ` (12 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 4ccfd67..f6b52d0 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -58,12 +58,6 @@
                 "size": 4
               },
               {
-                "field": "usbsts",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 4
-              },
-              {
                 "field": "usbsts_pending",
                 "version_id": 2,
                 "field_exists": false,
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 11/22] tests: vmstate static checker: remove last field in a struct
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (9 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 10/22] tests: vmstate static checker: remove a field Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 12/22] tests: vmstate static checker: change description name Juan Quintela
                   ` (11 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index f6b52d0..34bfbf6 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -637,12 +637,6 @@
                 "version_id": 0,
                 "field_exists": false,
                 "size": 256
-              },
-              {
-                "field": "irq_state",
-                "version_id": 2,
-                "field_exists": false,
-                "size": 16
               }
             ]
           }
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 12/22] tests: vmstate static checker: change description name
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (10 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 11/22] tests: vmstate static checker: remove last field in a struct Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 13/22] tests: vmstate static checker: remove Fields Juan Quintela
                   ` (10 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 34bfbf6..f69966d 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -749,7 +749,7 @@
     "version_id": 1,
     "minimum_version_id": 1,
     "Description": {
-      "name": "tpci200",
+      "name": "tpci2002",
       "version_id": 1,
       "minimum_version_id": 1,
       "Fields": [
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 13/22] tests: vmstate static checker: remove Fields
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (11 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 12/22] tests: vmstate static checker: change description name Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 14/22] tests: vmstate static checker: remove Description Juan Quintela
                   ` (9 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 114 +--------------------------
 1 file changed, 1 insertion(+), 113 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index f69966d..cc0aae3 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -196,119 +196,7 @@
     "Description": {
       "name": "pci-serial-multi",
       "version_id": 1,
-      "minimum_version_id": 1,
-      "Fields": [
-        {
-          "field": "dev",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1944,
-          "Description": {
-            "name": "PCIDevice",
-            "version_id": 2,
-            "minimum_version_id": 1,
-            "Fields": [
-              {
-                "field": "version_id",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 4
-              },
-              {
-                "field": "config",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 256
-              },
-              {
-                "field": "irq_state",
-                "version_id": 2,
-                "field_exists": false,
-                "size": 16
-              }
-            ]
-          }
-        },
-        {
-          "field": "state",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 368,
-          "Description": {
-            "name": "serial",
-            "version_id": 3,
-            "minimum_version_id": 2,
-            "Fields": [
-              {
-                "field": "divider",
-                "version_id": 2,
-                "field_exists": false,
-                "size": 2
-              },
-              {
-                "field": "rbr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "ier",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "iir",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "lcr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "mcr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "lsr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "msr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "scr",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 1
-              },
-              {
-                "field": "fcr_vmstate",
-                "version_id": 3,
-                "field_exists": false,
-                "size": 1
-              }
-            ]
-          }
-        },
-        {
-          "field": "level",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 4
-        }
-      ]
+      "minimum_version_id": 1
     }
   },
   "intel-hda-generic": {
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 14/22] tests: vmstate static checker: remove Description
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (12 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 13/22] tests: vmstate static checker: remove Fields Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 15/22] tests: vmstate static checker: remove Description inside Fields Juan Quintela
                   ` (8 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 33 +---------------------------
 1 file changed, 1 insertion(+), 32 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index cc0aae3..66ac3bd 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -462,38 +462,7 @@
   "cfi.pflash01": {
     "Name": "cfi.pflash01",
     "version_id": 1,
-    "minimum_version_id": 1,
-    "Description": {
-      "name": "pflash_cfi01",
-      "version_id": 1,
-      "minimum_version_id": 1,
-      "Fields": [
-        {
-          "field": "wcycle",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
-        },
-        {
-          "field": "cmd",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
-        },
-        {
-          "field": "status",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
-        },
-        {
-          "field": "counter",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 8
-        }
-      ]
-    }
+    "minimum_version_id": 1
   },
   "megasas": {
     "Name": "megasas",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 15/22] tests: vmstate static checker: remove Description inside Fields
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (13 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 14/22] tests: vmstate static checker: remove Description Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 16/22] tests: vmstate static checker: remove a subsection Juan Quintela
                   ` (7 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 27 +--------------------------
 1 file changed, 1 insertion(+), 26 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 66ac3bd..05b8fce 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -212,32 +212,7 @@
           "field": "pci",
           "version_id": 0,
           "field_exists": false,
-          "size": 1944,
-          "Description": {
-            "name": "PCIDevice",
-            "version_id": 2,
-            "minimum_version_id": 1,
-            "Fields": [
-              {
-                "field": "version_id",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 4
-              },
-              {
-                "field": "config",
-                "version_id": 0,
-                "field_exists": false,
-                "size": 256
-              },
-              {
-                "field": "irq_state",
-                "version_id": 2,
-                "field_exists": false,
-                "size": 16
-              }
-            ]
-          }
+          "size": 1944
         },
         {
           "field": "g_ctl",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 16/22] tests: vmstate static checker: remove a subsection
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (14 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 15/22] tests: vmstate static checker: remove Description inside Fields Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 17/22] tests: vmstate static checker: remove Subsections Juan Quintela
                   ` (6 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 05b8fce..6f8a617 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -836,19 +836,6 @@
                           "size": 1
                         }
                       ]
-                    },
-                    {
-                      "name": "fdrive/media_rate",
-                      "version_id": 1,
-                      "minimum_version_id": 1,
-                      "Fields": [
-                        {
-                          "field": "media_rate",
-                          "version_id": 0,
-                          "field_exists": false,
-                          "size": 1
-                        }
-                      ]
                     }
                   ]
                 }
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 17/22] tests: vmstate static checker: remove Subsections
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (15 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 16/22] tests: vmstate static checker: remove a subsection Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 18/22] tests: vmstate static checker: add substructure for usb-kbd for hid section Juan Quintela
                   ` (5 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 15 ---------------
 1 file changed, 15 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 6f8a617..b5cb1aa 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -558,21 +558,6 @@
           "field_exists": false,
           "size": 4
         }
-      ],
-      "Subsections": [
-        {
-          "name": "PIIX3/rcr",
-          "version_id": 1,
-          "minimum_version_id": 1,
-          "Fields": [
-            {
-              "field": "rcr",
-              "version_id": 0,
-              "field_exists": false,
-              "size": 1
-            }
-          ]
-        }
       ]
     }
   },
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 18/22] tests: vmstate static checker: add substructure for usb-kbd for hid section
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (16 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 17/22] tests: vmstate static checker: remove Subsections Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 19/22] tests: vmstate static checker: add size mismatch inside substructure Juan Quintela
                   ` (4 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

This shows how the script deals with substructures added to vmstate
descriptions that don't change the on-wire format.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 115 +++++++++++++++------------
 1 file changed, 64 insertions(+), 51 deletions(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index b5cb1aa..45cccaf 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -844,7 +844,7 @@
           "field": "dev",
           "version_id": 0,
           "field_exists": false,
-          "size": 4352,
+          "size": 5832,
           "Description": {
             "name": "USBDevice",
             "version_id": 1,
@@ -896,58 +896,71 @@
           }
         },
         {
-          "field": "kbd.keycodes",
+          "field": "hid",
           "version_id": 0,
           "field_exists": false,
-          "size": 4
-        },
-        {
-          "field": "head",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 4
-        },
-        {
-          "field": "n",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 4
-        },
-        {
-          "field": "kbd.modifiers",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 2
-        },
-        {
-          "field": "kbd.leds",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
-        },
-        {
-          "field": "kbd.key",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
-        },
-        {
-          "field": "kbd.keys",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 4
-        },
-        {
-          "field": "protocol",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 4
-        },
-        {
-          "field": "idle",
-          "version_id": 0,
-          "field_exists": false,
-          "size": 1
+          "size": 312,
+          "Description": {
+            "name": "HIDKeyboardDevice",
+            "version_id": 1,
+            "minimum_version_id": 1,
+            "Fields": [
+              {
+                "field": "kbd.keycodes",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "head",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "n",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "kbd.modifiers",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 2
+              },
+              {
+                "field": "kbd.leds",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "kbd.key",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              },
+              {
+                "field": "kbd.keys",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "protocol",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 4
+              },
+              {
+                "field": "idle",
+                "version_id": 0,
+                "field_exists": false,
+                "size": 1
+              }
+            ]
+          }
         }
       ]
     }
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 19/22] tests: vmstate static checker: add size mismatch inside substructure
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (17 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 18/22] tests: vmstate static checker: add substructure for usb-kbd for hid section Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 20/22] migration: Remove unneeded minimum_version_id_old Juan Quintela
                   ` (3 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel; +Cc: Amit Shah

From: Amit Shah <amit.shah@redhat.com>

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/vmstate-static-checker-data/dump2.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/vmstate-static-checker-data/dump2.json b/tests/vmstate-static-checker-data/dump2.json
index 45cccaf..75719f5 100644
--- a/tests/vmstate-static-checker-data/dump2.json
+++ b/tests/vmstate-static-checker-data/dump2.json
@@ -909,7 +909,7 @@
                 "field": "kbd.keycodes",
                 "version_id": 0,
                 "field_exists": false,
-                "size": 4
+                "size": 2
               },
               {
                 "field": "head",
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 20/22] migration: Remove unneeded minimum_version_id_old
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (18 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 19/22] tests: vmstate static checker: add size mismatch inside substructure Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 21/22] vmstate: Return error in case of error Juan Quintela
                   ` (2 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel

Once there, make checkpatch happy.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/usb/hcd-ohci.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index cd87074..cace945 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -1988,8 +1988,7 @@ static const VMStateDescription vmstate_ohci_state_port = {
     .name = "ohci-core/port",
     .version_id = 1,
     .minimum_version_id = 1,
-    .minimum_version_id_old = 1,
-    .fields = (VMStateField []) {
+    .fields = (VMStateField[]) {
         VMSTATE_UINT32(ctrl, OHCIPort),
         VMSTATE_END_OF_LIST()
     },
@@ -2015,9 +2014,8 @@ static const VMStateDescription vmstate_ohci_eof_timer = {
     .name = "ohci-core/eof-timer",
     .version_id = 1,
     .minimum_version_id = 1,
-    .minimum_version_id_old = 1,
     .pre_load = ohci_eof_timer_pre_load,
-    .fields = (VMStateField []) {
+    .fields = (VMStateField[]) {
         VMSTATE_TIMER(eof_timer, OHCIState),
         VMSTATE_END_OF_LIST()
     },
@@ -2078,7 +2076,6 @@ static const VMStateDescription vmstate_ohci = {
     .name = "ohci",
     .version_id = 1,
     .minimum_version_id = 1,
-    .minimum_version_id_old = 1,
     .fields = (VMStateField[]) {
         VMSTATE_PCI_DEVICE(parent_obj, OHCIPCIState),
         VMSTATE_STRUCT(state, OHCIPCIState, 1, vmstate_ohci_state, OHCIState),
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 21/22] vmstate: Return error in case of error
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (19 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 20/22] migration: Remove unneeded minimum_version_id_old Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 13:10 ` [Qemu-devel] [PULL 22/22] vmstate: Refactor & increase tests for primitive types Juan Quintela
  2014-06-24 15:10 ` [Qemu-devel] [PULL 00/22] Migration queue Peter Maydell
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel

If there is an error while loading a field, we should stop reading and
not continue with the rest of fields.  And we should also set an error
in qemu_file.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 vmstate.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/vmstate.c b/vmstate.c
index b5882fa..c996520 100644
--- a/vmstate.c
+++ b/vmstate.c
@@ -98,7 +98,11 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
                     ret = field->info->get(f, addr, size);

                 }
+                if (ret >= 0) {
+                    ret = qemu_file_get_error(f);
+                }
                 if (ret < 0) {
+                    qemu_file_set_error(f, ret);
                     trace_vmstate_load_field_error(field->name, ret);
                     return ret;
                 }
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 22/22] vmstate: Refactor & increase tests for primitive types
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (20 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 21/22] vmstate: Return error in case of error Juan Quintela
@ 2014-06-24 13:10 ` Juan Quintela
  2014-06-24 15:10 ` [Qemu-devel] [PULL 00/22] Migration queue Peter Maydell
  22 siblings, 0 replies; 28+ messages in thread
From: Juan Quintela @ 2014-06-24 13:10 UTC (permalink / raw)
  To: qemu-devel

This commit refactor the simple tests to test all integer types. We
move to hex because it is easier to read values of different types.

Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 tests/test-vmstate.c | 273 +++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 212 insertions(+), 61 deletions(-)

diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c
index 8b242c4..a462335 100644
--- a/tests/test-vmstate.c
+++ b/tests/test-vmstate.c
@@ -54,80 +54,232 @@ static QEMUFile *open_test_file(bool write)
     return qemu_fdopen(fd, write ? "wb" : "rb");
 }

-typedef struct TestSruct {
-    uint32_t a, b, c, e;
-    uint64_t d, f;
-    bool skip_c_e;
-} TestStruct;
+#define SUCCESS(val) \
+    g_assert_cmpint((val), ==, 0)

+#define FAILURE(val) \
+    g_assert_cmpint((val), !=, 0)

-static const VMStateDescription vmstate_simple = {
-    .name = "test",
-    .version_id = 1,
-    .minimum_version_id = 1,
-    .fields = (VMStateField[]) {
-        VMSTATE_UINT32(a, TestStruct),
-        VMSTATE_UINT32(b, TestStruct),
-        VMSTATE_UINT32(c, TestStruct),
-        VMSTATE_UINT64(d, TestStruct),
-        VMSTATE_END_OF_LIST()
-    }
-};
+static void save_vmstate(const VMStateDescription *desc, void *obj)
+{
+    QEMUFile *f = open_test_file(true);
+
+    /* Save file with vmstate */
+    vmstate_save_state(f, desc, obj);
+    qemu_put_byte(f, QEMU_VM_EOF);
+    g_assert(!qemu_file_get_error(f));
+    qemu_fclose(f);
+}

-static void test_simple_save(void)
+static void compare_vmstate(uint8_t *wire, size_t size)
 {
-    QEMUFile *fsave = open_test_file(true);
-    TestStruct obj = { .a = 1, .b = 2, .c = 3, .d = 4 };
-    vmstate_save_state(fsave, &vmstate_simple, &obj);
-    g_assert(!qemu_file_get_error(fsave));
-    qemu_fclose(fsave);
+    QEMUFile *f = open_test_file(false);
+    uint8_t result[size];

-    QEMUFile *loading = open_test_file(false);
-    uint8_t expected[] = {
-        0, 0, 0, 1, /* a */
-        0, 0, 0, 2, /* b */
-        0, 0, 0, 3, /* c */
-        0, 0, 0, 0, 0, 0, 0, 4, /* d */
-    };
-    uint8_t result[sizeof(expected)];
-    g_assert_cmpint(qemu_get_buffer(loading, result, sizeof(result)), ==,
+    /* read back as binary */
+
+    g_assert_cmpint(qemu_get_buffer(f, result, sizeof(result)), ==,
                     sizeof(result));
-    g_assert(!qemu_file_get_error(loading));
-    g_assert_cmpint(memcmp(result, expected, sizeof(result)), ==, 0);
+    g_assert(!qemu_file_get_error(f));
+
+    /* Compare that what is on the file is the same that what we
+       expected to be there */
+    SUCCESS(memcmp(result, wire, sizeof(result)));

     /* Must reach EOF */
-    qemu_get_byte(loading);
-    g_assert_cmpint(qemu_file_get_error(loading), ==, -EIO);
+    qemu_get_byte(f);
+    g_assert_cmpint(qemu_file_get_error(f), ==, -EIO);

-    qemu_fclose(loading);
+    qemu_fclose(f);
 }

-static void test_simple_load(void)
+static int load_vmstate_one(const VMStateDescription *desc, void *obj,
+                            int version, uint8_t *wire, size_t size)
 {
-    QEMUFile *fsave = open_test_file(true);
-    uint8_t buf[] = {
-        0, 0, 0, 10,             /* a */
-        0, 0, 0, 20,             /* b */
-        0, 0, 0, 30,             /* c */
-        0, 0, 0, 0, 0, 0, 0, 40, /* d */
-        QEMU_VM_EOF, /* just to ensure we won't get EOF reported prematurely */
-    };
-    qemu_put_buffer(fsave, buf, sizeof(buf));
-    qemu_fclose(fsave);
+    QEMUFile *f;
+    int ret;
+
+    f = open_test_file(true);
+    qemu_put_buffer(f, wire, size);
+    qemu_fclose(f);
+
+    f = open_test_file(false);
+    ret = vmstate_load_state(f, desc, obj, version);
+    if (ret) {
+        g_assert(qemu_file_get_error(f));
+    } else{
+        g_assert(!qemu_file_get_error(f));
+    }
+    qemu_fclose(f);
+    return ret;
+}

-    QEMUFile *loading = open_test_file(false);
-    TestStruct obj;
-    vmstate_load_state(loading, &vmstate_simple, &obj, 1);
-    g_assert(!qemu_file_get_error(loading));
-    g_assert_cmpint(obj.a, ==, 10);
-    g_assert_cmpint(obj.b, ==, 20);
-    g_assert_cmpint(obj.c, ==, 30);
-    g_assert_cmpint(obj.d, ==, 40);
-    qemu_fclose(loading);
+
+static int load_vmstate(const VMStateDescription *desc,
+                        void *obj, void *obj_clone,
+                        void (*obj_copy)(void *, void*),
+                        int version, uint8_t *wire, size_t size)
+{
+    /* We test with zero size */
+    obj_copy(obj_clone, obj);
+    FAILURE(load_vmstate_one(desc, obj, version, wire, 0));
+
+    /* Stream ends with QEMU_EOF, so we need at least 3 bytes to be
+     * able to test in the middle */
+
+    if (size > 3) {
+
+        /* We test with size - 2. We can't test size - 1 due to EOF tricks */
+        obj_copy(obj, obj_clone);
+        FAILURE(load_vmstate_one(desc, obj, version, wire, size - 2));
+
+        /* Test with size/2, first half of real state */
+        obj_copy(obj, obj_clone);
+        FAILURE(load_vmstate_one(desc, obj, version, wire, size/2));
+
+        /* Test with size/2, second half of real state */
+        obj_copy(obj, obj_clone);
+        FAILURE(load_vmstate_one(desc, obj, version, wire + (size/2), size/2));
+
+    }
+    obj_copy(obj, obj_clone);
+    return load_vmstate_one(desc, obj, version, wire, size);
+}
+
+/* Test struct that we are going to use for our tests */
+
+typedef struct TestSimple {
+    bool     b_1,   b_2;
+    uint8_t  u8_1;
+    uint16_t u16_1;
+    uint32_t u32_1;
+    uint64_t u64_1;
+    int8_t   i8_1,  i8_2;
+    int16_t  i16_1, i16_2;
+    int32_t  i32_1, i32_2;
+    int64_t  i64_1, i64_2;
+} TestSimple;
+
+/* Object instantiation, we are going to use it in more than one test */
+
+TestSimple obj_simple = {
+    .b_1 = true,
+    .b_2 = false,
+    .u8_1 = 130,
+    .u16_1 = 512,
+    .u32_1 = 70000,
+    .u64_1 = 12121212,
+    .i8_1 = 65,
+    .i8_2 = -65,
+    .i16_1 = 512,
+    .i16_2 = -512,
+    .i32_1 = 70000,
+    .i32_2 = -70000,
+    .i64_1 = 12121212,
+    .i64_2 = -12121212,
+};
+
+/* Description of the values.  If you add a primitive type
+   you are expected to add a test here */
+
+static const VMStateDescription vmstate_simple_primitive = {
+    .name = "simple/primitive",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_BOOL(b_1, TestSimple),
+        VMSTATE_BOOL(b_2, TestSimple),
+        VMSTATE_UINT8(u8_1, TestSimple),
+        VMSTATE_UINT16(u16_1, TestSimple),
+        VMSTATE_UINT32(u32_1, TestSimple),
+        VMSTATE_UINT64(u64_1, TestSimple),
+        VMSTATE_INT8(i8_1, TestSimple),
+        VMSTATE_INT8(i8_2, TestSimple),
+        VMSTATE_INT16(i16_1, TestSimple),
+        VMSTATE_INT16(i16_2, TestSimple),
+        VMSTATE_INT32(i32_1, TestSimple),
+        VMSTATE_INT32(i32_2, TestSimple),
+        VMSTATE_INT64(i64_1, TestSimple),
+        VMSTATE_INT64(i64_2, TestSimple),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+/* It describes what goes through the wire.  Our tests are basically:
+
+   * save test
+     - save a struct a vmstate to a file
+     - read that file back (binary read, no vmstate)
+     - compare it with what we expect to be on the wire
+   * load test
+     - save to the file what we expect to be on the wire
+     - read struct back with vmstate in a different
+     - compare back with the original struct
+*/
+
+uint8_t wire_simple_primitive[] = {
+    /* b_1 */   0x01,
+    /* b_2 */   0x00,
+    /* u8_1 */  0x82,
+    /* u16_1 */ 0x02, 0x00,
+    /* u32_1 */ 0x00, 0x01, 0x11, 0x70,
+    /* u64_1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xf4, 0x7c,
+    /* i8_1 */  0x41,
+    /* i8_2 */  0xbf,
+    /* i16_1 */ 0x02, 0x00,
+    /* i16_2 */ 0xfe, 0x0,
+    /* i32_1 */ 0x00, 0x01, 0x11, 0x70,
+    /* i32_2 */ 0xff, 0xfe, 0xee, 0x90,
+    /* i64_1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xf4, 0x7c,
+    /* i64_2 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0x47, 0x0b, 0x84,
+    QEMU_VM_EOF, /* just to ensure we won't get EOF reported prematurely */
+};
+
+static void obj_simple_copy(void *target, void *source)
+{
+    memcpy(target, source, sizeof(TestSimple));
+}
+
+static void test_simple_primitive(void)
+{
+    TestSimple obj, obj_clone;
+
+    memset(&obj, 0, sizeof(obj));
+    save_vmstate(&vmstate_simple_primitive, &obj_simple);
+
+    compare_vmstate(wire_simple_primitive, sizeof(wire_simple_primitive));
+
+    SUCCESS(load_vmstate(&vmstate_simple_primitive, &obj, &obj_clone,
+                         obj_simple_copy, 1, wire_simple_primitive,
+                         sizeof(wire_simple_primitive)));
+
+#define FIELD_EQUAL(name)   g_assert_cmpint(obj.name, ==, obj_simple.name)
+
+    FIELD_EQUAL(b_1);
+    FIELD_EQUAL(b_2);
+    FIELD_EQUAL(u8_1);
+    FIELD_EQUAL(u16_1);
+    FIELD_EQUAL(u32_1);
+    FIELD_EQUAL(u64_1);
+    FIELD_EQUAL(i8_1);
+    FIELD_EQUAL(i8_2);
+    FIELD_EQUAL(i16_1);
+    FIELD_EQUAL(i16_2);
+    FIELD_EQUAL(i32_1);
+    FIELD_EQUAL(i32_2);
+    FIELD_EQUAL(i64_1);
+    FIELD_EQUAL(i64_2);
 }
+#undef FIELD_EQUAL
+
+typedef struct TestStruct {
+    uint32_t a, b, c, e;
+    uint64_t d, f;
+    bool skip_c_e;
+} TestStruct;

 static const VMStateDescription vmstate_versioned = {
-    .name = "test",
+    .name = "test/versioned",
     .version_id = 2,
     .minimum_version_id = 1,
     .fields = (VMStateField[]) {
@@ -202,7 +354,7 @@ static bool test_skip(void *opaque, int version_id)
 }

 static const VMStateDescription vmstate_skipping = {
-    .name = "test",
+    .name = "test/skip",
     .version_id = 2,
     .minimum_version_id = 1,
     .fields = (VMStateField[]) {
@@ -337,8 +489,7 @@ int main(int argc, char **argv)
     temp_fd = mkstemp(temp_file);

     g_test_init(&argc, &argv, NULL);
-    g_test_add_func("/vmstate/simple/save", test_simple_save);
-    g_test_add_func("/vmstate/simple/load", test_simple_load);
+    g_test_add_func("/vmstate/simple/primitive", test_simple_primitive);
     g_test_add_func("/vmstate/versioned/load/v1", test_load_v1);
     g_test_add_func("/vmstate/versioned/load/v2", test_load_v2);
     g_test_add_func("/vmstate/field_exists/load/noskip", test_load_noskip);
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/22] Migration queue
  2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
                   ` (21 preceding siblings ...)
  2014-06-24 13:10 ` [Qemu-devel] [PULL 22/22] vmstate: Refactor & increase tests for primitive types Juan Quintela
@ 2014-06-24 15:10 ` Peter Maydell
  22 siblings, 0 replies; 28+ messages in thread
From: Peter Maydell @ 2014-06-24 15:10 UTC (permalink / raw)
  To: Juan Quintela; +Cc: QEMU Developers

On 24 June 2014 14:09, Juan Quintela <quintela@redhat.com> wrote:
> Hi
>
> Peter, please pull:
>
>
> - RDMA bugfixes (Michael)
> - Static checker from Amit (v5)
> - acked patches from vmstate (thanks Dave)
>
> Later, Juan.
>
>
> The following changes since commit d9c1647d896d3192cba9dbf98fb7efab876edde5:
>
>   Merge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into staging (2014-06-23 12:55:22 +0100)
>
> are available in the git repository at:
>
>
>   git://github.com/juanquintela/qemu.git tags/migration/20140623
>
> for you to fetch changes up to 4ea7df4e5c6b9d8b8a474680d6b1687fc8eacbac:
>
>   vmstate: Refactor & increase tests for primitive types (2014-06-23 19:14:52 +0200)

> ----------------------------------------------------------------
> migration/next for 20140623

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 00/22] migration queue
@ 2019-03-06 11:42 Dr. David Alan Gilbert (git)
  2019-03-06 12:06 ` no-reply
  2019-03-06 16:23 ` Peter Maydell
  0 siblings, 2 replies; 28+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2019-03-06 11:42 UTC (permalink / raw)
  To: qemu-devel, quintela, peterx, marcel.apfelbaum, wei.w.wang,
	yury-kotov, chen.zhang
  Cc: eblake, armbru

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

The following changes since commit b5b6b2b912bbcd3953407da938a8f969577ad3a1:

  Merge remote-tracking branch 'remotes/amarkovic/tags/mips-queue-mar-05-2019' into staging (2019-03-05 21:07:29 +0000)

are available in the Git repository at:

  git://github.com/dagrh/qemu.git tags/pull-migration-20190306a

for you to fetch changes up to b5922fc5891261153f1a0f20e814c620aabeb6ac:

  qapi/migration.json: Remove a variable that doesn't exist in example (2019-03-06 10:49:18 +0000)

----------------------------------------------------------------
Migation pull 2019-03-06

(This replaces the pull sent yesterday)

   a) 4 small fixes including the cancel problem
     that caused the ahci migration test to fail
     intermittently
   b) Yury's ignore-shared feature
   c) Juan's extra tests
   d) Wei Wang's free page hinting
   e) Some Colo fixes from Zhang Chen

Diff from yesterdays pull:
  1) A missing fix of mine (cleanup during exit)
  2) Changes from Eric/Markus on 'Create socket-address parameter'

----------------------------------------------------------------
Dr. David Alan Gilbert (3):
      migration: Fix cancel state
      migration/rdma: Fix qemu_rdma_cleanup null check
      migration: Cleanup during exit

Juan Quintela (3):
      tests: Add migration xbzrle test
      migration: Create socket-address parameter
      tests: Add basic migration precopy tcp test

Marcel Apfelbaum (1):
      migration/rdma: clang compilation fix

Wei Wang (7):
      bitmap: fix bitmap_count_one
      bitmap: bitmap_count_one_with_offset
      migration: use bitmap_mutex in migration_bitmap_clear_dirty
      migration: API to clear bits of guest free pages from the dirty bitmap
      migration/ram.c: add a notifier chain for precopy
      migration/ram.c: add the free page optimization enable flag
      virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT

Yury Kotov (5):
      exec: Change RAMBlockIterFunc definition
      migration: Introduce ignore-shared capability
      migration: Add an ability to ignore shared RAM blocks
      tests/migration-test: Add a test for ignore-shared capability
      migration: Add capabilities validation

Zhang Chen (3):
      Migration/colo.c: Fix double close bug when occur COLO failover
      Migration/colo.c: Make COLO node running after failover
      qapi/migration.json: Remove a variable that doesn't exist in example

 exec.c                             |  38 ++---
 hmp.c                              |  33 ++++
 hw/virtio/virtio-balloon.c         | 263 +++++++++++++++++++++++++++++++
 include/exec/cpu-common.h          |   7 +-
 include/hw/virtio/virtio-balloon.h |  28 +++-
 include/migration/misc.h           |  24 ++-
 include/qemu/bitmap.h              |  17 ++
 migration/colo.c                   |   2 +-
 migration/migration.c              |  62 +++++++-
 migration/migration.h              |   9 +-
 migration/postcopy-ram.c           |  48 +++---
 migration/ram.c                    | 231 ++++++++++++++++++++++++----
 migration/rdma.c                   |  18 ++-
 migration/savevm.c                 | 152 ++++++++++++++++++
 migration/socket.c                 |  11 ++
 qapi/migration.json                |  13 +-
 stubs/ram-block.c                  |  15 ++
 tests/migration-test.c             | 308 +++++++++++++++++++++++++++++++++----
 util/vfio-helpers.c                |   6 +-
 vl.c                               |   8 +-
 20 files changed, 1167 insertions(+), 126 deletions(-)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/22] migration queue
  2019-03-06 11:42 [Qemu-devel] [PULL 00/22] migration queue Dr. David Alan Gilbert (git)
@ 2019-03-06 12:06 ` no-reply
  2019-03-06 16:23 ` Peter Maydell
  1 sibling, 0 replies; 28+ messages in thread
From: no-reply @ 2019-03-06 12:06 UTC (permalink / raw)
  To: dgilbert
  Cc: fam, qemu-devel, quintela, peterx, marcel.apfelbaum, wei.w.wang,
	yury-kotov, chen.zhang, armbru

Patchew URL: https://patchew.org/QEMU/20190306114227.9125-1-dgilbert@redhat.com/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Type: series
Message-id: 20190306114227.9125-1-dgilbert@redhat.com
Subject: [Qemu-devel] [PULL 00/22] migration queue

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
 * [new tag]               patchew/20190306114227.9125-1-dgilbert@redhat.com -> patchew/20190306114227.9125-1-dgilbert@redhat.com
Switched to a new branch 'test'
060f501bdc qapi/migration.json: Remove a variable that doesn't exist in example
79985c89a1 Migration/colo.c: Make COLO node running after failover
04fa41f3fe Migration/colo.c: Fix double close bug when occur COLO failover
fad6a7a2fe virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT
ea055843a6 migration/ram.c: add the free page optimization enable flag
04f12f4493 migration/ram.c: add a notifier chain for precopy
acffe8fac2 migration: API to clear bits of guest free pages from the dirty bitmap
28ba7920b5 migration: use bitmap_mutex in migration_bitmap_clear_dirty
50d141e21b bitmap: bitmap_count_one_with_offset
d09d8c34fe bitmap: fix bitmap_count_one
0b3f876f73 tests: Add basic migration precopy tcp test
b9b8858224 migration: Create socket-address parameter
c3e10e38d0 tests: Add migration xbzrle test
9891a178e1 migration: Add capabilities validation
a3ba078ea3 tests/migration-test: Add a test for ignore-shared capability
40a11f6d72 migration: Add an ability to ignore shared RAM blocks
b08a8bcb8f migration: Introduce ignore-shared capability
502f3e7690 exec: Change RAMBlockIterFunc definition
1419fc4f68 migration/rdma: clang compilation fix
af4a8e34f7 migration: Cleanup during exit
6078675984 migration/rdma: Fix qemu_rdma_cleanup null check
f414a0d58c migration: Fix cancel state

=== OUTPUT BEGIN ===
1/22 Checking commit f414a0d58c61 (migration: Fix cancel state)
2/22 Checking commit 60786759846a (migration/rdma: Fix qemu_rdma_cleanup null check)
3/22 Checking commit af4a8e34f76a (migration: Cleanup during exit)
4/22 Checking commit 1419fc4f68a6 (migration/rdma: clang compilation fix)
5/22 Checking commit 502f3e769033 (exec: Change RAMBlockIterFunc definition)
6/22 Checking commit b08a8bcb8f55 (migration: Introduce ignore-shared capability)
7/22 Checking commit 40a11f6d720b (migration: Add an ability to ignore shared RAM blocks)
ERROR: Macros with multiple statements should be enclosed in a do - while loop
#149: FILE: migration/ram.c:169:
+#define RAMBLOCK_FOREACH_NOT_IGNORED(block)            \
+    INTERNAL_RAMBLOCK_FOREACH(block)                   \
+        if (ramblock_is_ignored(block)) {} else

ERROR: trailing statements should be on next line
#151: FILE: migration/ram.c:171:
+        if (ramblock_is_ignored(block)) {} else

total: 2 errors, 0 warnings, 386 lines checked

Patch 7/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

8/22 Checking commit a3ba078ea311 (tests/migration-test: Add a test for ignore-shared capability)
ERROR: if this code is redundant consider removing it
#235: FILE: tests/migration-test.c:829:
+#if 0

total: 1 errors, 0 warnings, 255 lines checked

Patch 8/22 has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.

9/22 Checking commit 9891a178e1cb (migration: Add capabilities validation)
10/22 Checking commit c3e10e38d0a5 (tests: Add migration xbzrle test)
11/22 Checking commit b9b885822408 (migration: Create socket-address parameter)
12/22 Checking commit 0b3f876f7352 (tests: Add basic migration precopy tcp test)
13/22 Checking commit d09d8c34fe5f (bitmap: fix bitmap_count_one)
14/22 Checking commit 50d141e21bda (bitmap: bitmap_count_one_with_offset)
15/22 Checking commit 28ba7920b5e4 (migration: use bitmap_mutex in migration_bitmap_clear_dirty)
16/22 Checking commit acffe8fac2f4 (migration: API to clear bits of guest free pages from the dirty bitmap)
17/22 Checking commit 04f12f44931e (migration/ram.c: add a notifier chain for precopy)
18/22 Checking commit ea055843a6f6 (migration/ram.c: add the free page optimization enable flag)
19/22 Checking commit fad6a7a2fe5e (virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_HINT)
20/22 Checking commit 04fa41f3fed6 (Migration/colo.c: Fix double close bug when occur COLO failover)
21/22 Checking commit 79985c89a1be (Migration/colo.c: Make COLO node running after failover)
22/22 Checking commit 060f501bdcb2 (qapi/migration.json: Remove a variable that doesn't exist in example)
=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/20190306114227.9125-1-dgilbert@redhat.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/22] migration queue
  2019-03-06 11:42 [Qemu-devel] [PULL 00/22] migration queue Dr. David Alan Gilbert (git)
  2019-03-06 12:06 ` no-reply
@ 2019-03-06 16:23 ` Peter Maydell
  1 sibling, 0 replies; 28+ messages in thread
From: Peter Maydell @ 2019-03-06 16:23 UTC (permalink / raw)
  To: Dr. David Alan Gilbert (git)
  Cc: QEMU Developers, Juan Quintela, Peter Xu, Marcel Apfelbaum,
	wei.w.wang, yury-kotov, Zhang Chen, Markus Armbruster

On Wed, 6 Mar 2019 at 11:44, Dr. David Alan Gilbert (git)
<dgilbert@redhat.com> wrote:
>
> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
>
> The following changes since commit b5b6b2b912bbcd3953407da938a8f969577ad3a1:
>
>   Merge remote-tracking branch 'remotes/amarkovic/tags/mips-queue-mar-05-2019' into staging (2019-03-05 21:07:29 +0000)
>
> are available in the Git repository at:
>
>   git://github.com/dagrh/qemu.git tags/pull-migration-20190306a
>
> for you to fetch changes up to b5922fc5891261153f1a0f20e814c620aabeb6ac:
>
>   qapi/migration.json: Remove a variable that doesn't exist in example (2019-03-06 10:49:18 +0000)
>
> ----------------------------------------------------------------
> Migation pull 2019-03-06
>
> (This replaces the pull sent yesterday)
>
>    a) 4 small fixes including the cancel problem
>      that caused the ahci migration test to fail
>      intermittently
>    b) Yury's ignore-shared feature
>    c) Juan's extra tests
>    d) Wei Wang's free page hinting
>    e) Some Colo fixes from Zhang Chen
>
> Diff from yesterdays pull:
>   1) A missing fix of mine (cleanup during exit)
>   2) Changes from Eric/Markus on 'Create socket-address parameter'
>
> ----------------------------------------------------------------

Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/4.0
for any user-visible changes.

-- PMM

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2019-03-06 16:24 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-24 13:09 [Qemu-devel] [PULL 00/22] Migration queue Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 01/22] rdma: bug fixes Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 02/22] migration: dump vmstate info as a json file for static analysis Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 03/22] vmstate-static-checker: script to validate vmstate changes Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 04/22] tests: vmstate static checker: add dump1 and dump2 files Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 05/22] tests: vmstate static checker: incompat machine types Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 06/22] tests: vmstate static checker: add version error in main section Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 07/22] tests: vmstate static checker: version mismatch inside a Description Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 08/22] tests: vmstate static checker: minimum_version_id check Juan Quintela
2014-06-24 13:09 ` [Qemu-devel] [PULL 09/22] tests: vmstate static checker: remove a section Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 10/22] tests: vmstate static checker: remove a field Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 11/22] tests: vmstate static checker: remove last field in a struct Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 12/22] tests: vmstate static checker: change description name Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 13/22] tests: vmstate static checker: remove Fields Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 14/22] tests: vmstate static checker: remove Description Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 15/22] tests: vmstate static checker: remove Description inside Fields Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 16/22] tests: vmstate static checker: remove a subsection Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 17/22] tests: vmstate static checker: remove Subsections Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 18/22] tests: vmstate static checker: add substructure for usb-kbd for hid section Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 19/22] tests: vmstate static checker: add size mismatch inside substructure Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 20/22] migration: Remove unneeded minimum_version_id_old Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 21/22] vmstate: Return error in case of error Juan Quintela
2014-06-24 13:10 ` [Qemu-devel] [PULL 22/22] vmstate: Refactor & increase tests for primitive types Juan Quintela
2014-06-24 15:10 ` [Qemu-devel] [PULL 00/22] Migration queue Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2019-03-06 11:42 [Qemu-devel] [PULL 00/22] migration queue Dr. David Alan Gilbert (git)
2019-03-06 12:06 ` no-reply
2019-03-06 16:23 ` Peter Maydell
2013-03-26 14:43 Juan Quintela

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).