* [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py
@ 2025-04-29 15:21 Thomas Huth
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
` (3 more replies)
0 siblings, 4 replies; 16+ messages in thread
From: Thomas Huth @ 2025-04-29 15:21 UTC (permalink / raw)
To: qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
This set of patches adds an automatic test of the vmstate via the
scripts/vmstate-static-checker.py script. For this we need some
reference files from an older version of QEMU. There are already
some files available in tests/vmstate-static-checker-data/ but
they are of no use anymore since they have been taken from machines
that have already been removed a long time ago (and thus these files
now get removed, too). I chose to use QEMU 7.2 for the reference files
instead since this is a long term support release that is still actively
being maintained, so we certainly want to make sure that we don't
break migration from that version to the latest one.
Thomas Huth (4):
tests/vmstate-static-checker-data: Remove old dump files
scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le
field
tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17
tests/functional: Test with scripts/vmstate-static-checker.py
MAINTAINERS | 3 +-
scripts/vmstate-static-checker.py | 1 +
.../aarch64/virt-7.2.json | 2571 +++++++++++++
.../vmstate-static-checker/m68k/virt-7.2.json | 2936 ++++++++++++++
.../ppc64/pseries-7.2.json} | 1276 ++++---
.../s390x/s390-ccw-virtio-7.2.json | 475 +++
.../x86_64/pc-q35-7.2.json | 3402 +++++++++++++++++
tests/functional/meson.build | 13 +-
tests/functional/test_vmstate.py | 56 +
tests/vmstate-static-checker-data/dump1.json | 1163 ------
10 files changed, 10143 insertions(+), 1753 deletions(-)
create mode 100644 tests/data/vmstate-static-checker/aarch64/virt-7.2.json
create mode 100644 tests/data/vmstate-static-checker/m68k/virt-7.2.json
rename tests/{vmstate-static-checker-data/dump2.json => data/vmstate-static-checker/ppc64/pseries-7.2.json} (51%)
create mode 100644 tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
create mode 100644 tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
create mode 100755 tests/functional/test_vmstate.py
delete mode 100644 tests/vmstate-static-checker-data/dump1.json
--
2.49.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files
2025-04-29 15:21 [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py Thomas Huth
@ 2025-04-29 15:21 ` Thomas Huth
2025-04-29 15:29 ` Philippe Mathieu-Daudé
2025-04-29 22:13 ` Peter Xu
2025-04-29 15:21 ` [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field Thomas Huth
` (2 subsequent siblings)
3 siblings, 2 replies; 16+ messages in thread
From: Thomas Huth @ 2025-04-29 15:21 UTC (permalink / raw)
To: qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
From: Thomas Huth <thuth@redhat.com>
These files reference QEMU machine types that have already been
removed and thus are of no use anymore.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
MAINTAINERS | 1 -
tests/vmstate-static-checker-data/dump1.json | 1163 ------------------
tests/vmstate-static-checker-data/dump2.json | 968 ---------------
3 files changed, 2132 deletions(-)
delete mode 100644 tests/vmstate-static-checker-data/dump1.json
delete mode 100644 tests/vmstate-static-checker-data/dump2.json
diff --git a/MAINTAINERS b/MAINTAINERS
index b3f9f2680bc..bb2a66b9866 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3524,7 +3524,6 @@ F: include/qemu/userfaultfd.h
F: migration/
F: scripts/vmstate-static-checker.py
F: tests/functional/test_migration.py
-F: tests/vmstate-static-checker-data/
F: tests/qtest/migration/
F: tests/qtest/migration-*
F: docs/devel/migration/
diff --git a/tests/vmstate-static-checker-data/dump1.json b/tests/vmstate-static-checker-data/dump1.json
deleted file mode 100644
index 334ec079631..00000000000
--- a/tests/vmstate-static-checker-data/dump1.json
+++ /dev/null
@@ -1,1163 +0,0 @@
-{
- "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": 1,
- "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
- }
- ]
- }
- },
- "sun-fdtwo": {
- "Name": "sun-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
deleted file mode 100644
index 7184e9ccbb5..00000000000
--- a/tests/vmstate-static-checker-data/dump2.json
+++ /dev/null
@@ -1,968 +0,0 @@
-{
- "vmschkmachine": {
- "Name": "pc-i440fx-2.2"
- },
- "fw_cfg2": {
- "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": 1,
- "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_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
- }
- },
- "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
- },
- {
- "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
- },
- "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": "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
- }
- ]
- }
- },
- "tpci200": {
- "Name": "tpci200",
- "version_id": 1,
- "minimum_version_id": 1,
- "Description": {
- "name": "tpci2002",
- "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
- }
- ]
- }
- },
- "sun-fdtwo": {
- "Name": "sun-fdtwo",
- "version_id": 2,
- "minimum_version_id": 2,
- "Description": {
- "name": "fdc",
- "version_id": 1,
- "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
- }
- ]
- }
- ]
- }
- }
- ]
- }
- }
- ]
- }
- },
- "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": 5832,
- "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": "hid",
- "version_id": 0,
- "field_exists": false,
- "size": 312,
- "Description": {
- "name": "HIDKeyboardDevice",
- "version_id": 1,
- "minimum_version_id": 1,
- "Fields": [
- {
- "field": "kbd.keycodes",
- "version_id": 0,
- "field_exists": false,
- "size": 2
- },
- {
- "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
- }
- ]
- }
- }
- ]
- }
- }
-}
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field
2025-04-29 15:21 [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py Thomas Huth
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
@ 2025-04-29 15:21 ` Thomas Huth
2025-04-29 22:16 ` Peter Xu
2025-04-29 15:21 ` [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17 Thomas Huth
2025-04-29 15:21 ` [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py Thomas Huth
3 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2025-04-29 15:21 UTC (permalink / raw)
To: qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
From: Thomas Huth <thuth@redhat.com>
ghes_addr_le has been renamed to hw_error_le in commit 652f6d86cbb
("acpi/ghes: better name the offset of the hardware error firmware").
Adjust the checker script to allow that changed field name.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
scripts/vmstate-static-checker.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py
index 9c0e6b81f21..25aca839a03 100755
--- a/scripts/vmstate-static-checker.py
+++ b/scripts/vmstate-static-checker.py
@@ -42,6 +42,7 @@ def check_fields_match(name, s_field, d_field):
# Some fields changed names between qemu versions. This list
# is used to allow such changes in each section / description.
changed_names = {
+ 'acpi-ghes': ['ghes_addr_le', 'hw_error_le'],
'apic': ['timer', 'timer_expiry'],
'e1000': ['dev', 'parent_obj'],
'ehci': ['dev', 'pcidev'],
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17
2025-04-29 15:21 [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py Thomas Huth
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
2025-04-29 15:21 ` [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field Thomas Huth
@ 2025-04-29 15:21 ` Thomas Huth
2025-04-29 22:30 ` Peter Xu
2025-04-29 15:21 ` [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py Thomas Huth
3 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2025-04-29 15:21 UTC (permalink / raw)
To: qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
From: Thomas Huth <thuth@redhat.com>
For automatic tests, we need reference files from older QEMU versions.
QEMU 7.2 is a long term stable release, so it's a good candidate for
checking whether the migration could still work correctly. Let's add the
files from that version that have been taken with the "-dump-vmstate"
parameter of QEMU (compiled with single machines and the configure switch
"--without-default-devices" to keep the json files reasonable small).
Some devices also have been removed manually from the json files, e.g.
the "pci-bridge" (which can be disabled in later QEMU versions via Kconfig),
and some Linux-related devices like "scsi-block" and "scsi-generic" and
KVM-related devices. Without removing them, we might get errors otherwise
if these devices have not been compiled into the destination QEMU build.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
MAINTAINERS | 1 +
.../aarch64/virt-7.2.json | 2571 +++++++++++++
.../vmstate-static-checker/m68k/virt-7.2.json | 2936 ++++++++++++++
.../ppc64/pseries-7.2.json | 1068 ++++++
.../s390x/s390-ccw-virtio-7.2.json | 475 +++
.../x86_64/pc-q35-7.2.json | 3402 +++++++++++++++++
6 files changed, 10453 insertions(+)
create mode 100644 tests/data/vmstate-static-checker/aarch64/virt-7.2.json
create mode 100644 tests/data/vmstate-static-checker/m68k/virt-7.2.json
create mode 100644 tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
create mode 100644 tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
create mode 100644 tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
diff --git a/MAINTAINERS b/MAINTAINERS
index bb2a66b9866..65fb61844b3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3523,6 +3523,7 @@ F: include/migration/
F: include/qemu/userfaultfd.h
F: migration/
F: scripts/vmstate-static-checker.py
+F: tests/data/vmstate-static-checker/
F: tests/functional/test_migration.py
F: tests/qtest/migration/
F: tests/qtest/migration-*
diff --git a/tests/data/vmstate-static-checker/aarch64/virt-7.2.json b/tests/data/vmstate-static-checker/aarch64/virt-7.2.json
new file mode 100644
index 00000000000..d7491be99cb
--- /dev/null
+++ b/tests/data/vmstate-static-checker/aarch64/virt-7.2.json
@@ -0,0 +1,2571 @@
+{
+ "vmschkmachine": {
+ "Name": "virt-7.2"
+ },
+ "gpex-pcihost": {
+ "Name": "gpex-pcihost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "arm_gic": {
+ "Name": "arm_gic",
+ "version_id": 12,
+ "minimum_version_id": 12,
+ "Description": {
+ "name": "arm_gic",
+ "version_id": 12,
+ "minimum_version_id": 12,
+ "Fields": [
+ {
+ "field": "ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cpu_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 7,
+ "Description": {
+ "name": "arm_gic_irq_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "active",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "model",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "edge_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "group",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "irq_target",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sgi_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "running_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "current_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "bpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "abpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "nsapr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "arm_gic_virt_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "h_hcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_misr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_lr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cpu_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "priority_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "running_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "current_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "bpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "abpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "arm-gicv3-its-common": {
+ "Name": "arm-gicv3-its-common",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "arm_gicv3_its",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iidr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cbaser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "cwriter",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "creadr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "baser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "arm-gicv3-common": {
+ "Name": "arm-gicv3-common",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "arm_gicv3",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "gicd_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicd_statusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "group",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "grpmod",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "active",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "edge_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicd_ipriority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "gicd_irouter",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "gicd_nsacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cpu",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 664,
+ "Description": {
+ "name": "arm_gicv3_cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_statusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_waker",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_propbaser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "gicr_pendbaser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "gicr_igroupr0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_ienabler0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_ipendr0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_iactiver0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "edge_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_igrpmodr0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_nsacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gicr_ipriorityr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "icc_ctlr_el1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "icc_pmr_el1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "icc_bpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "icc_apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "icc_igrpen",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "icc_ctlr_el3",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "arm_gicv3_cpu/virt",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ich_apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "ich_hcr_el2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "ich_lr_el2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "ich_vmcr_el2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "arm_gicv3_cpu/sre_el1",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "icc_sre_el1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "arm_gicv3_cpu/gicv4",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "gicr_vpropbaser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "gicr_vpendbaser",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "arm_gicv3/gicd_no_migration_shift_bug",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "gicd_no_migration_shift_bug",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pflash_cfi01_blk_write",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "blk_bytes",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ },
+ {
+ "field": "blk_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pl061_luminary": {
+ "Name": "pl061_luminary",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Description": {
+ "name": "pl061",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Fields": [
+ {
+ "field": "locked",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "old_out_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "old_in_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dir",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "isense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ibe",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "im",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "istate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "afsel",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr2r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr4r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr8r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "odr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "pur",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "pdr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "slr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "den",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "amsel",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "pl011_luminary": {
+ "Name": "pl011_luminary",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "pl011",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "readbuff",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "lcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dmacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "int_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "int_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_fifo",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ilpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ibrd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "fbrd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ifl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_pos",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pl011/clock",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "clk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pl061": {
+ "Name": "pl061",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Description": {
+ "name": "pl061",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Fields": [
+ {
+ "field": "locked",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "old_out_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "old_in_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dir",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "isense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ibe",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "im",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "istate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "afsel",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr2r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr4r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dr8r",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "odr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "pur",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "pdr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "slr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "den",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "amsel",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "vmcoreinfo": {
+ "Name": "vmcoreinfo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "vmcoreinfo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "has_vmcoreinfo",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "vmcoreinfo.host_format",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "vmcoreinfo.guest_format",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "vmcoreinfo.size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vmcoreinfo.paddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "arm_gic_common": {
+ "Name": "arm_gic_common",
+ "version_id": 12,
+ "minimum_version_id": 12,
+ "Description": {
+ "name": "arm_gic",
+ "version_id": 12,
+ "minimum_version_id": 12,
+ "Fields": [
+ {
+ "field": "ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cpu_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 7,
+ "Description": {
+ "name": "arm_gic_irq_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "active",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "model",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "edge_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "group",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "irq_target",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sgi_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "running_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "current_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "bpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "abpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "nsapr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "arm_gic_virt_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "h_hcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_misr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_lr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "h_apr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cpu_ctlr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "priority_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "running_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "current_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "bpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "abpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "arm-smmuv3": {
+ "Name": "arm-smmuv3",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "smmuv3",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "features",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "sid_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sid_split",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr0ack",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "statusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq_ctrl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gerror",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gerrorn",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gerror_irq_cfg0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "gerror_irq_cfg1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "gerror_irq_cfg2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "strtab_base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "strtab_base_cfg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "eventq_irq_cfg0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "eventq_irq_cfg1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "eventq_irq_cfg2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cmdq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "smmuv3_queue",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "prod",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cons",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "log2size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "eventq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "smmuv3_queue",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "prod",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cons",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "log2size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "pl011": {
+ "Name": "pl011",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "pl011",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "readbuff",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "lcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "dmacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "int_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "int_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_fifo",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ilpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ibrd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "fbrd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ifl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_pos",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "read_trigger",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pl011/clock",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "clk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "armv7m": {
+ "Name": "armv7m",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "armv7m",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "refclk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "cpuclk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "fw_cfg_mem": {
+ "Name": "fw_cfg_mem",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pl031": {
+ "Name": "pl031",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "pl031",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tick_offset_vmstate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "mr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "lr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "im",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "is",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pl031/tick-offset",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tick_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "fw_cfg_io": {
+ "Name": "fw_cfg_io",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "virtio-serial-device": {
+ "Name": "virtio-serial-device",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Description": {
+ "name": "virtio-console",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "virtio",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ }
+ ]
+ }
+ },
+ "acpi-ged": {
+ "Name": "acpi-ged",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "acpi-ged",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ged_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 560,
+ "Description": {
+ "name": "acpi-ged-state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sel",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "acpi-ged/memhp",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "memhp_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 304,
+ "Description": {
+ "name": "memory hotplug state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "selector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "devs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "memory hotplug device state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "is_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "is_inserting",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ost_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ost_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "acpi-ged/ghes",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ghes_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "acpi-ghes",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ghes_addr_le",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pcie-host-bridge": {
+ "Name": "pcie-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "gpio-key": {
+ "Name": "gpio-key",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "gpio-key",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "armv7m_nvic": {
+ "Name": "armv7m_nvic",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Description": {
+ "name": "armv7m_nvic",
+ "version_id": 4,
+ "minimum_version_id": 4,
+ "Fields": [
+ {
+ "field": "vectors",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 6,
+ "Description": {
+ "name": "armv7m_nvic_info",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "prio",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "active",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "prigroup[M_REG_NS]",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "armv7m_nvic/m-security",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sec_vectors",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 6,
+ "Description": {
+ "name": "armv7m_nvic_info",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "prio",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "active",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "prigroup[M_REG_S]",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "itns",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pci-host-bridge": {
+ "Name": "pci-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "gpex-root": {
+ "Name": "gpex-root",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "gpex_root",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "parent_obj",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2608,
+ "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": true,
+ "size": 256
+ },
+ {
+ "field": "config",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 4096
+ },
+ {
+ "field": "irq_state",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "armv7m_systick": {
+ "Name": "armv7m_systick",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Description": {
+ "name": "armv7m_systick",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "refclk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "cpuclk",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "clock",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "clock/muldiv",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "multiplier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "divider",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "control",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "tick",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "ptimer",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "ptimer",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "limit",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "delta",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "period_frac",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "period",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "last_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/data/vmstate-static-checker/m68k/virt-7.2.json b/tests/data/vmstate-static-checker/m68k/virt-7.2.json
new file mode 100644
index 00000000000..16bee8cdad0
--- /dev/null
+++ b/tests/data/vmstate-static-checker/m68k/virt-7.2.json
@@ -0,0 +1,2936 @@
+{
+ "vmschkmachine": {
+ "Name": "virt-7.2"
+ },
+ "m68020-m68k-cpu": {
+ "Name": "m68020-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "m68030-m68k-cpu": {
+ "Name": "m68030-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "m68k-irq-controller": {
+ "Name": "m68k-irq-controller",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "m68k-irqc",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ipr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "virt-ctrl": {
+ "Name": "virt-ctrl",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "virt-ctrl",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "irq_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "m68040-m68k-cpu": {
+ "Name": "m68040-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "goldfish_pic": {
+ "Name": "goldfish_pic",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "goldfish_pic",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "goldfish_tty": {
+ "Name": "goldfish_tty",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "goldfish_tty",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "data_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "data_ptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "int_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "rx_fifo",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "Fifo8",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "data",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 0
+ },
+ {
+ "field": "head",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "num",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "m68000-m68k-cpu": {
+ "Name": "m68000-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "m68010-m68k-cpu": {
+ "Name": "m68010-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "m68060-m68k-cpu": {
+ "Name": "m68060-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "fw_cfg_mem": {
+ "Name": "fw_cfg_mem",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "any-m68k-cpu": {
+ "Name": "any-m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "fw_cfg_io": {
+ "Name": "fw_cfg_io",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "virtio-serial-device": {
+ "Name": "virtio-serial-device",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Description": {
+ "name": "virtio-console",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "virtio",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ }
+ ]
+ }
+ },
+ "goldfish_rtc": {
+ "Name": "goldfish_rtc",
+ "version_id": 3,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "goldfish_rtc",
+ "version_id": 3,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tick_offset_vmstate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "alarm_next",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "alarm_running",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "time_high",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "tick_offset",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "m68k-cpu": {
+ "Name": "m68k-cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "cpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.dregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.aregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.current_sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_op",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_x",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_n",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_v",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cc_z",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_vector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.pending_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "cpu/fpu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.fpcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fpsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.fregs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "env.fp_result",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16,
+ "Description": {
+ "name": "freg",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "freg_tmp",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "tmp_mant",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tmp_exp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "cpu/cf_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.macc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "env.macsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mac_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.rambar0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mbar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_mmu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.mmu.ar",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.ssw",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.tcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "env.mmu.urp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.srp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.fault",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "env.mmu.ttr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.mmu.mmusr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "cpu/68040_spregs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "env.vbr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.cacr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.sfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "env.dfc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/data/vmstate-static-checker/ppc64/pseries-7.2.json b/tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
new file mode 100644
index 00000000000..330bbbefedf
--- /dev/null
+++ b/tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
@@ -0,0 +1,1068 @@
+{
+ "vmschkmachine": {
+ "Name": "pseries-7.2"
+ },
+ "spapr-nvram": {
+ "Name": "spapr-nvram",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr_nvram",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "buf",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 0
+ }
+ ]
+ }
+ },
+ "xive-source": {
+ "Name": "xive-source",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "xive-source",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "nr_irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "status",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 0
+ }
+ ]
+ }
+ },
+ "xive-tctx": {
+ "Name": "xive-tctx",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "xive-tctx",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "regs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 64
+ }
+ ]
+ }
+ },
+ "pci-host-bridge": {
+ "Name": "pci-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "ics-spapr": {
+ "Name": "ics-spapr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ics",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "nr_irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "ics/irq",
+ "version_id": 2,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "server",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "saved_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "scsi-cd": {
+ "Name": "scsi-cd",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "scsi-disk",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "qdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 608,
+ "Description": {
+ "name": "SCSIDevice",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "unit_attention.key",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unit_attention.asc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unit_attention.ascq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense_is_ua",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "requests",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "SCSIDevice/sense",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "media_changed",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "media_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "eject_request",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tray_open",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tray_locked",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "spapr-xive": {
+ "Name": "spapr-xive",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr-xive",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "nr_irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "eat",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "spapr-xive/eas",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "w",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ {
+ "field": "endt",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 32,
+ "Description": {
+ "name": "spapr-xive/end",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "w0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w3",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w4",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w5",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w6",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "w7",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "scsi-hd": {
+ "Name": "scsi-hd",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "scsi-disk",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "qdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 608,
+ "Description": {
+ "name": "SCSIDevice",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "unit_attention.key",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unit_attention.asc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unit_attention.ascq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense_is_ua",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "requests",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "SCSIDevice/sense",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sense",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "media_changed",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "media_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "eject_request",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tray_open",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tray_locked",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "fw_cfg_mem": {
+ "Name": "fw_cfg_mem",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "spapr-vty": {
+ "Name": "spapr-vty",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr_vty",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 848,
+ "Description": {
+ "name": "spapr_vio",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "signal_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qladdr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qsize",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "crq.qnext",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ {
+ "field": "in",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "out",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "buf",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ },
+ "spapr-wdt": {
+ "Name": "spapr-wdt",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr_watchdog",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 48
+ },
+ {
+ "field": "action",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "leave_others",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "fw_cfg_io": {
+ "Name": "fw_cfg_io",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "spapr-vscsi": {
+ "Name": "spapr-vscsi",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr_vscsi",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "vdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 848,
+ "Description": {
+ "name": "spapr_vio",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "signal_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qladdr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qsize",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "crq.qnext",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "spapr-rtc": {
+ "Name": "spapr-rtc",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr/rtc",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "ns_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "spapr-vlan": {
+ "Name": "spapr-vlan",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "spapr_llan",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "sdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 848,
+ "Description": {
+ "name": "spapr_vio",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "signal_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qladdr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "crq.qsize",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "crq.qnext",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ {
+ "field": "isopen",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "buf_list",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "add_buf_ptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "use_buf_ptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rx_bufs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rxq_ptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "spapr_llan/rx_pools",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "rx_pool",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "spapr_llan/rx_buffer_pool",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "bufsize",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "bds",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "ics": {
+ "Name": "ics",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ics",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "nr_irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "irqs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8,
+ "Description": {
+ "name": "ics/irq",
+ "version_id": 2,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "server",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "saved_priority",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json b/tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
new file mode 100644
index 00000000000..9698852bd38
--- /dev/null
+++ b/tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
@@ -0,0 +1,475 @@
+{
+ "vmschkmachine": {
+ "Name": "s390-ccw-virtio-7.2"
+ },
+ "sclpquiesce": {
+ "Name": "sclpquiesce",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "sclpquiesce",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "event_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "s390-sclp-event-facility": {
+ "Name": "s390-sclp-event-facility",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "vmstate-event-facility",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "receive_mask_pieces[1]",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "vmstate-event-facility/mask64",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "receive_mask_pieces[0]",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "vmstate-event-facility/mask_length",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "mask_length",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "zpci": {
+ "Name": "zpci",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "zpci",
+ "version_id": 0,
+ "minimum_version_id": 0
+ }
+ },
+ "sclpconsole": {
+ "Name": "sclpconsole",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "sclpconsole",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "event.event_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "iov",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "iov_sclp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iov_bs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iov_data_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "iov_sclp_rest",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "virtio-serial-device": {
+ "Name": "virtio-serial-device",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Description": {
+ "name": "virtio-console",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "virtio",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ }
+ ]
+ }
+ },
+ "sclplmconsole": {
+ "Name": "sclplmconsole",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "sclplmconsole",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "event.event_pending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "write_errors",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "length",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "buf",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "s390-pcihost": {
+ "Name": "s390-pcihost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "s390-flic-qemu": {
+ "Name": "s390-flic-qemu",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "qemu-s390-flic",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "simm",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "nimm",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "fw_cfg_io": {
+ "Name": "fw_cfg_io",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "s390-ipl": {
+ "Name": "s390-ipl",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "ipl",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "compat_start_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "compat_bios_start_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "iplb",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4096,
+ "Description": {
+ "name": "ipl/iplb",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "reserved1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "devno",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "reserved2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ipl/iplb_extended",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "reserved_ext",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "iplb_valid",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cssid",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ssid",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "devno",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ },
+ "pci-host-bridge": {
+ "Name": "pci-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "fw_cfg_mem": {
+ "Name": "fw_cfg_mem",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json b/tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
new file mode 100644
index 00000000000..c450639a48d
--- /dev/null
+++ b/tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
@@ -0,0 +1,3402 @@
+{
+ "vmschkmachine": {
+ "Name": "pc-q35-7.2"
+ },
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pcie-host-bridge": {
+ "Name": "pcie-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "isa-pit": {
+ "Name": "isa-pit",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "i8254",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "channels[0].irq_disabled",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "channels",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 56,
+ "Description": {
+ "name": "pit channel",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "latched_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "count_latched",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status_latched",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "read_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "write_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "write_latch",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "rw_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "bcd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "gate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "count_load_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_transition_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ {
+ "field": "channels[0].next_transition_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "mch": {
+ "Name": "mch",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "mch",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "parent_obj",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2608,
+ "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": true,
+ "size": 256
+ },
+ {
+ "field": "config",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 4096
+ },
+ {
+ "field": "irq_state",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ },
+ {
+ "field": "unused",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "pic-common": {
+ "Name": "pic-common",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "i8259",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "last_irr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "irr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "imr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "isr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority_add",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "irq_base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "read_reg_select",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "poll",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "special_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "init_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "auto_eoi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "rotate_on_auto_eoi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "special_fully_nested_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "init4",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "single_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "elcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "ICH9-LPC": {
+ "Name": "ICH9-LPC",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ICH9LPC",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "d",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2608,
+ "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": true,
+ "size": 256
+ },
+ {
+ "field": "config",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 4096
+ },
+ {
+ "field": "irq_state",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ },
+ {
+ "field": "apm",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 304,
+ "Description": {
+ "name": "APM State",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "apmc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "apms",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "pm",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 6480,
+ "Description": {
+ "name": "ich9_pm",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "acpi_regs.pm1.evt.sts",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "acpi_regs.pm1.evt.en",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "acpi_regs.pm1.cnt.cnt",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "acpi_regs.tmr.timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "acpi_regs.tmr.overflow_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "acpi_regs.gpe.sts",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "acpi_regs.gpe.en",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smi_en",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "smi_sts",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ich9_pm/memhp",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "acpi_memory_hotplug",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 304,
+ "Description": {
+ "name": "memory hotplug state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "selector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "devs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "memory hotplug device state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "is_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "is_inserting",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ost_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ost_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "ich9_pm/tco",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tco_regs",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 320,
+ "Description": {
+ "name": "tco io device status",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tco.rld",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "tco.din",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco.dout",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco.sts1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "tco.sts2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "tco.cnt1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "tco.cnt2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "tco.msg1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco.msg2",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco.wdcnt",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco.tmr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "sw_irq_gen",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tco_timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "expire_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "timeouts_no",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "ich9_pm/cpuhp",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "cpuhp_state",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 304,
+ "Description": {
+ "name": "CPU hotplug state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "selector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "command",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "devs",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 32,
+ "Description": {
+ "name": "CPU hotplug device state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "is_inserting",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "is_removing",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ost_event",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ost_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "ich9_pm/pcihp",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "acpi_pci_hotplug.hotplug_select",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "acpi_pci_hotplug.acpi_pcihp_pci_status",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 12,
+ "Description": {
+ "name": "acpi_pcihp_pci_status",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "up",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "down",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ {
+ "field": "acpi_pci_hotplug.acpi_index",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "chip_config",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sci_level",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ICH9LPC/rst_cnt",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "rst_cnt",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "ICH9LPC/smi_feat",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "smi_guest_features_le",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smi_features_ok",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smi_negotiated_features",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pit-common": {
+ "Name": "pit-common",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "i8254",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "channels[0].irq_disabled",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "channels",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 56,
+ "Description": {
+ "name": "pit channel",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "latched_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "count_latched",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status_latched",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "read_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "write_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "write_latch",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "rw_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "bcd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "gate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "count_load_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_transition_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ {
+ "field": "channels[0].next_transition_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "vmgenid": {
+ "Name": "vmgenid",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "vmgenid",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "vmgenid_addr_le",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "ioapic-common": {
+ "Name": "ioapic-common",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ioapic",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "id",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ioregsel",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unused",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "irr",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ioredtbl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "isa-i8259": {
+ "Name": "isa-i8259",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "i8259",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "last_irr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "irr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "imr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "isr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "priority_add",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "irq_base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "read_reg_select",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "poll",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "special_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "init_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "auto_eoi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "rotate_on_auto_eoi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "special_fully_nested_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "init4",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "single_mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "elcr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pflash_cfi01_blk_write",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "blk_bytes",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 0
+ },
+ {
+ "field": "blk_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "i8042-mmio": {
+ "Name": "i8042-mmio",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "pckbd-mmio",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "kbd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2328,
+ "Description": {
+ "name": "pckbd",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "write_cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending_tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pckbd_outport",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "outport",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "pckbd/extended_state",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "migration_flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "obsrc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "obdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cbdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "isa-serial": {
+ "Name": "isa-serial",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "serial",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 656,
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "serial/thr_ipending",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "thr_ipending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "serial/tsr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tsr_retry",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "thr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tsr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "serial/recv_fifo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "recv_fifo",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "Fifo8",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "data",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 0
+ },
+ {
+ "field": "head",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "num",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "serial/xmit_fifo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "xmit_fifo",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 24,
+ "Description": {
+ "name": "Fifo8",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "data",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 0
+ },
+ {
+ "field": "head",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "num",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "serial/fifo_timeout_timer",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "fifo_timeout_timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "serial/timeout_ipending",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "timeout_ipending",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "serial/poll",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "poll_msl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "modem_status_poll",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "ps2-mouse": {
+ "Name": "ps2-mouse",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "ps2mouse",
+ "version_id": 2,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "parent_obj",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1104,
+ "Description": {
+ "name": "PS2 Common State",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "write_cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.rptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.wptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 256
+ }
+ ]
+ }
+ },
+ {
+ "field": "mouse_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_resolution",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_sample_rate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_wrap",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_type",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_detect_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mouse_dx",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "mouse_dy",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "mouse_dz",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "mouse_buttons",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "kvmvapic": {
+ "Name": "kvmvapic",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "kvm-tpr-opt",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "rom_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 124,
+ "Description": {
+ "name": "kvmvapic-guest-rom",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "unused",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "vaddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "fixup_start",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "fixup_end",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vapic_vaddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vapic_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vcpu_shift",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "real_tpr_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "up",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 44,
+ "Description": {
+ "name": "kvmvapic-handlers",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "set_tpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "set_tpr_eax",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "get_tpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "get_tpr_stack",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ {
+ "field": "mp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 44,
+ "Description": {
+ "name": "kvmvapic-handlers",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "set_tpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "set_tpr_eax",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "get_tpr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "get_tpr_stack",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "real_tpr_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rom_state_vaddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vapic_paddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "rom_state_paddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "ich9-ahci": {
+ "Name": "ich9-ahci",
+ "version_id": 1,
+ "minimum_version_id": 0,
+ "Description": {
+ "name": "ich9_ahci",
+ "version_id": 1,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "parent_obj",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2608,
+ "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": true,
+ "size": 256
+ },
+ {
+ "field": "config",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 4096
+ },
+ {
+ "field": "irq_state",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ },
+ {
+ "field": "ahci",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 624,
+ "Description": {
+ "name": "ahci",
+ "version_id": 1,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 6088,
+ "Description": {
+ "name": "ahci port",
+ "version_id": 1,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "port",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 2304,
+ "Description": {
+ "name": "ide_bus",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unit",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ide_bus/error",
+ "version_id": 2,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "error_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "retry_sector_num",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "retry_nsector",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "retry_unit",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "port.ifs[0]",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 984,
+ "Description": {
+ "name": "ide_drive",
+ "version_id": 3,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "mult_sectors",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "identify_set",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "identify_data",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 512
+ },
+ {
+ "field": "feature",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "error",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "nsector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "sector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "lcyl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hcyl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hob_feature",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hob_sector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hob_nsector",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hob_lcyl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "hob_hcyl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "select",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "lba48",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "sense_key",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "asc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cdrom_changed",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 1
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ide_drive/pio_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "req_nb_sectors",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "io_buffer",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cur_io_buffer_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "cur_io_buffer_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "end_transfer_fn_idx",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "elementary_transfer_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "packet_transfer_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "ide_drive/tray_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "tray_open",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "tray_locked",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "ide_drive/atapi/gesn_state",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "events.new_media",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "events.eject_request",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "field": "port_state",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "finished",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.lst_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.lst_addr_hi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.fis_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.fis_addr_hi",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.irq_stat",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.irq_mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.tfdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.sig",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.scr_stat",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.scr_ctl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.scr_err",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.scr_act",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "port_regs.cmd_issue",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "done_first_drq",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "busy_slot",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "init_d2h_sent",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ncq_tfs",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 112,
+ "Description": {
+ "name": "ncq state",
+ "version_id": 1,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "sector_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "lba",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "tag",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "slot",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "used",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "halt",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "field": "control_regs.cap",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "control_regs.ghc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "control_regs.irqstatus",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "control_regs.impl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "control_regs.version",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "idp_index",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ports",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "i8042": {
+ "Name": "i8042",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Description": {
+ "name": "pckbd",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "kbd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2328,
+ "Description": {
+ "name": "pckbd",
+ "version_id": 3,
+ "minimum_version_id": 3,
+ "Fields": [
+ {
+ "field": "write_cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pending_tmp",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "pckbd_outport",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "outport",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "pckbd/extended_state",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "migration_flags",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "obsrc",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "obdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "cbdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "fw_cfg_io": {
+ "Name": "fw_cfg_io",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "vmcoreinfo": {
+ "Name": "vmcoreinfo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "vmcoreinfo",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "has_vmcoreinfo",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "vmcoreinfo.host_format",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "vmcoreinfo.guest_format",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "vmcoreinfo.size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "vmcoreinfo.paddr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "ps2-kbd": {
+ "Name": "ps2-kbd",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Description": {
+ "name": "ps2kbd",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "parent_obj",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1104,
+ "Description": {
+ "name": "PS2 Common State",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "write_cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.rptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.wptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "queue.data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 256
+ }
+ ]
+ }
+ },
+ {
+ "field": "scan_enabled",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "translate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "scancode_set",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 4
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "ps2kbd/ledstate",
+ "version_id": 3,
+ "minimum_version_id": 2,
+ "Fields": [
+ {
+ "field": "ledstate",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ },
+ {
+ "name": "ps2kbd/need_high_bit",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "need_high_bit",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ },
+ {
+ "name": "ps2kbd/command_reply_queue",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "parent_obj.queue.cwptr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "ICH9-SMB": {
+ "Name": "ICH9-SMB",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ich9_smb",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "dev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2608,
+ "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": true,
+ "size": 256
+ },
+ {
+ "field": "config",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 4096
+ },
+ {
+ "field": "irq_state",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 16
+ }
+ ]
+ }
+ },
+ {
+ "field": "irq_enabled",
+ "version_id": 0,
+ "field_exists": true,
+ "size": 1
+ },
+ {
+ "field": "smb",
+ "version_id": 1,
+ "field_exists": true,
+ "size": 384,
+ "Description": {
+ "name": "pmsmb",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "smb_stat",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_ctl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_cmd",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_data0",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_data1",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_index",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "smb_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_auxctl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "smb_blkdata",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "i2c_enable",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "op_done",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "in_i2c_block_read",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "start_transaction_on_status_read",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "isa-pcspk": {
+ "Name": "isa-pcspk",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "pcspk",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "data_on",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "dummy_refresh_clock",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "acpi-erst": {
+ "Name": "acpi-erst",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "acpi-erst",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "operation",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "busy_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "command_status",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "record_offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "reg_action",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "reg_value",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "record_identifier",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_record_index",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "i8257": {
+ "Name": "i8257",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "dma",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "command",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "mask",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "flip_flop",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "dshift",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "regs",
+ "version_id": 1,
+ "field_exists": false,
+ "size": 40,
+ "Description": {
+ "name": "dma_regs",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "now",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "base",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "page",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "pageh",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "dack",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "eop",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ "port92": {
+ "Name": "port92",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "port92",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "outport",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "q35-pcihost": {
+ "Name": "q35-pcihost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "ioapic": {
+ "Name": "ioapic",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "ioapic",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "id",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "ioregsel",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unused",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "irr",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "ioredtbl",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ },
+ "smbus-eeprom": {
+ "Name": "smbus-eeprom",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "smbus-eeprom",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "smbusdev",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 216,
+ "Description": {
+ "name": "smbus-device",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "i2c",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 168,
+ "Description": {
+ "name": "I2CSlave",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "address",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "mode",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "data_len",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "data_buf",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ {
+ "field": "data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "offset",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "accessed",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ }
+ ]
+ }
+ },
+ "mc146818rtc": {
+ "Name": "mc146818rtc",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "mc146818rtc",
+ "version_id": 3,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "cmos_data",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 128
+ },
+ {
+ "field": "cmos_index",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 1
+ },
+ {
+ "field": "unused",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 28
+ },
+ {
+ "field": "periodic_timer",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_periodic_time",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "unused",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 24
+ },
+ {
+ "field": "irq_coalesced",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "period",
+ "version_id": 2,
+ "field_exists": false,
+ "size": 4
+ },
+ {
+ "field": "base_rtc",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "last_update",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "offset",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "update_timer",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "next_alarm_time",
+ "version_id": 3,
+ "field_exists": false,
+ "size": 8
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "mc146818rtc/irq_reinject_on_ack_count",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "irq_reinject_on_ack_count",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 2
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "pci-host-bridge": {
+ "Name": "pci-host-bridge",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Description": {
+ "name": "PCIHost",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "config_reg",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 4
+ }
+ ]
+ }
+ },
+ "fw_cfg_mem": {
+ "Name": "fw_cfg_mem",
+ "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
+ }
+ ],
+ "Subsections": [
+ {
+ "name": "fw_cfg/dma",
+ "version_id": 0,
+ "minimum_version_id": 0,
+ "Fields": [
+ {
+ "field": "dma_addr",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ },
+ {
+ "name": "fw_cfg/acpi_mr",
+ "version_id": 1,
+ "minimum_version_id": 1,
+ "Fields": [
+ {
+ "field": "table_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "linker_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ },
+ {
+ "field": "rsdp_mr_size",
+ "version_id": 0,
+ "field_exists": false,
+ "size": 8
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py
2025-04-29 15:21 [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py Thomas Huth
` (2 preceding siblings ...)
2025-04-29 15:21 ` [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17 Thomas Huth
@ 2025-04-29 15:21 ` Thomas Huth
2025-04-30 16:10 ` Pierrick Bouvier
3 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2025-04-29 15:21 UTC (permalink / raw)
To: qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
From: Thomas Huth <thuth@redhat.com>
We've got this nice vmstate-static-checker.py script that can help
to detect screw-ups in the migration states. Unfortunately, it's
currently only run manually, so there could be regressions that nobody
notices immediately. Let's run it from a functional test automatically
so that we got at least a basic coverage in each CI run.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
MAINTAINERS | 1 +
tests/functional/meson.build | 13 +++++++-
tests/functional/test_vmstate.py | 56 ++++++++++++++++++++++++++++++++
3 files changed, 69 insertions(+), 1 deletion(-)
create mode 100755 tests/functional/test_vmstate.py
diff --git a/MAINTAINERS b/MAINTAINERS
index 65fb61844b3..6a8d81458ad 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3525,6 +3525,7 @@ F: migration/
F: scripts/vmstate-static-checker.py
F: tests/data/vmstate-static-checker/
F: tests/functional/test_migration.py
+F: tests/functional/test_vmstate.py
F: tests/qtest/migration/
F: tests/qtest/migration-*
F: docs/devel/migration/
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index b317ad42c5a..9f339e626f6 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -76,6 +76,7 @@ tests_generic_bsduser = [
tests_aarch64_system_quick = [
'migration',
+ 'vmstate',
]
tests_aarch64_system_thorough = [
@@ -164,6 +165,10 @@ tests_loongarch64_system_thorough = [
'loongarch64_virt',
]
+tests_m68k_system_quick = [
+ 'vmstate',
+]
+
tests_m68k_system_thorough = [
'm68k_mcf5208evb',
'm68k_nextcube',
@@ -230,6 +235,7 @@ tests_ppc_system_thorough = [
tests_ppc64_system_quick = [
'migration',
+ 'vmstate',
]
tests_ppc64_system_thorough = [
@@ -265,6 +271,10 @@ tests_rx_system_thorough = [
'rx_gdbsim',
]
+tests_s390x_system_quick = [
+ 'vmstate',
+]
+
tests_s390x_system_thorough = [
's390x_ccw_virtio',
's390x_replay',
@@ -305,8 +315,9 @@ tests_x86_64_system_quick = [
'migration',
'pc_cpu_hotplug_props',
'virtio_version',
- 'x86_cpu_model_versions',
+ 'vmstate',
'vnc',
+ 'x86_cpu_model_versions',
]
tests_x86_64_system_thorough = [
diff --git a/tests/functional/test_vmstate.py b/tests/functional/test_vmstate.py
new file mode 100755
index 00000000000..3ba56d580db
--- /dev/null
+++ b/tests/functional/test_vmstate.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# This test runs the vmstate-static-checker script with the current QEMU
+
+import subprocess
+
+from qemu_test import QemuSystemTest
+
+
+class VmStateTest(QemuSystemTest):
+
+ def test_vmstate(self):
+ target_machine = {
+ 'aarch64': 'virt-7.2',
+ 'm68k': 'virt-7.2',
+ 'ppc64': 'pseries-7.2',
+ 's390x': 's390-ccw-virtio-7.2',
+ 'x86_64': 'pc-q35-7.2',
+ }
+ self.set_machine(target_machine[self.arch])
+
+ # Run QEMU to get the current vmstate json file:
+ dst_json = self.scratch_file('dest.json')
+ self.log.info('Dumping vmstate from ' + self.qemu_bin)
+ cp = subprocess.run([self.qemu_bin, '-nodefaults',
+ '-M', target_machine[self.arch],
+ '-dump-vmstate', dst_json],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True)
+ if cp.returncode != 0:
+ self.fail('Running QEMU failed:\n' + cp.stdout)
+ if cp.stdout:
+ self.log.info('QEMU output: ' + cp.stdout)
+
+ # Check whether the old vmstate json file is still compatible:
+ src_json = self.data_file('..', 'data', 'vmstate-static-checker',
+ self.arch,
+ target_machine[self.arch] + '.json')
+ vmstate_checker = self.data_file('..', '..', 'scripts',
+ 'vmstate-static-checker.py')
+ self.log.info('Comparing vmstate with ' + src_json)
+ cp = subprocess.run([vmstate_checker, '-s', src_json, '-d', dst_json],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ text=True)
+ if cp.returncode != 0:
+ self.fail('Running vmstate-static-checker failed:\n' + cp.stdout)
+ if cp.stdout:
+ self.log.warning('vmstate-static-checker output: ' + cp.stdout)
+
+
+if __name__ == '__main__':
+ QemuSystemTest.main()
--
2.49.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
@ 2025-04-29 15:29 ` Philippe Mathieu-Daudé
2025-04-29 22:13 ` Peter Xu
1 sibling, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-04-29 15:29 UTC (permalink / raw)
To: Thomas Huth, qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
On 29/4/25 17:21, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> These files reference QEMU machine types that have already been
> removed and thus are of no use anymore.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> MAINTAINERS | 1 -
> tests/vmstate-static-checker-data/dump1.json | 1163 ------------------
> tests/vmstate-static-checker-data/dump2.json | 968 ---------------
> 3 files changed, 2132 deletions(-)
> delete mode 100644 tests/vmstate-static-checker-data/dump1.json
> delete mode 100644 tests/vmstate-static-checker-data/dump2.json
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
2025-04-29 15:29 ` Philippe Mathieu-Daudé
@ 2025-04-29 22:13 ` Peter Xu
2025-04-30 10:55 ` Thomas Huth
1 sibling, 1 reply; 16+ messages in thread
From: Peter Xu @ 2025-04-29 22:13 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel, Fabiano Rosas, John Snow
On Tue, Apr 29, 2025 at 05:21:38PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> These files reference QEMU machine types that have already been
> removed and thus are of no use anymore.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
I never noticed these files, but when looking it seems to me these two
dumps are tailored to be used to test the script itself..
See:
$ git ls tests/vmstate-static-checker-data/
e178113ff6 hw: Replace anti-social QOM type names
38ef86b5a6 tests: vmstate static checker: add size mismatch inside substructure
af3713f6b9 tests: vmstate static checker: add substructure for usb-kbd for hid section
c7173a9c18 tests: vmstate static checker: remove Subsections
aa2a12bb82 tests: vmstate static checker: remove a subsection
b5968f0ab3 tests: vmstate static checker: remove Description inside Fields
ff29b8573f tests: vmstate static checker: remove Description
083bac3484 tests: vmstate static checker: remove Fields
1d681c712a tests: vmstate static checker: change description name
fd52ffb9bf tests: vmstate static checker: remove last field in a struct
55e8e0e19c tests: vmstate static checker: remove a field
ab99bdbe33 tests: vmstate static checker: remove a section
7daa3d76df tests: vmstate static checker: minimum_version_id check
4efa6e1d64 tests: vmstate static checker: version mismatch inside a Description
a81d3fad87 tests: vmstate static checker: add version error in main section
bc178dc563 tests: vmstate static checker: incompat machine types
a10413e4fc tests: vmstate static checker: add dump1 and dump2 files
So dump2.json was deliberately modified to trigger all kinds of error that
the python script can detect.
Maybe we can still keep it there, but at least make it clearer that it's
testing the script? For example, we could create a bash under the same dir
running the script over the two dumps and comparing the results to be the
expected one?
Currently the output:
$ scripts/vmstate-static-checker.py -s ./tests/vmstate-static-checker-data/dump1.json -d ./tests/vmstate-static-checker-data/dump2.json
Warning: checking incompatible machine types: "pc-i440fx-2.1", "pc-i440fx-2.2"
Section "fw_cfg" does not exist in dest
Section "fusbh200-ehci-usb" version error: 2 > 1
Section "fusbh200-ehci-usb", Description "ehci-core": expected field "usbsts", got "usbsts_pending"; skipping rest
Section "pci-serial-4x" Description "pci-serial-multi": Entry "Fields" missing
Section "intel-hda-generic", Description "intel-hda", Field "pci": missing description
Section "cfi.pflash01": Entry "Description" missing
Section "megasas", Description "PCIDevice": expected field "irq_state", while dest has no further fields
Section "PIIX3-xen" Description "PIIX3": minimum version error: 1 < 2
Section "PIIX3-xen" Description "PIIX3": Entry "Subsections" missing
Section "tpci200": Description "tpci200" missing, got "tpci2002" instead; skipping
Section "sun-fdtwo" Description "fdc": version error: 2 > 1
Section "sun-fdtwo", Description "fdrive": Subsection "fdrive/media_rate" not found
Section "usb-kbd" Description "usb-kbd" Field "kbd.keycodes" size mismatch: 4 , 2
So the bash can make sure the result is exactly that. If we want, we could
even route that to CI, but I'd say optional.
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field
2025-04-29 15:21 ` [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field Thomas Huth
@ 2025-04-29 22:16 ` Peter Xu
0 siblings, 0 replies; 16+ messages in thread
From: Peter Xu @ 2025-04-29 22:16 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel, Fabiano Rosas, John Snow
On Tue, Apr 29, 2025 at 05:21:39PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> ghes_addr_le has been renamed to hw_error_le in commit 652f6d86cbb
> ("acpi/ghes: better name the offset of the hardware error firmware").
> Adjust the checker script to allow that changed field name.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
> ---
> scripts/vmstate-static-checker.py | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/scripts/vmstate-static-checker.py b/scripts/vmstate-static-checker.py
> index 9c0e6b81f21..25aca839a03 100755
> --- a/scripts/vmstate-static-checker.py
> +++ b/scripts/vmstate-static-checker.py
> @@ -42,6 +42,7 @@ def check_fields_match(name, s_field, d_field):
> # Some fields changed names between qemu versions. This list
> # is used to allow such changes in each section / description.
> changed_names = {
> + 'acpi-ghes': ['ghes_addr_le', 'hw_error_le'],
> 'apic': ['timer', 'timer_expiry'],
> 'e1000': ['dev', 'parent_obj'],
> 'ehci': ['dev', 'pcidev'],
> --
> 2.49.0
>
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17
2025-04-29 15:21 ` [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17 Thomas Huth
@ 2025-04-29 22:30 ` Peter Xu
2025-04-30 11:13 ` Thomas Huth
0 siblings, 1 reply; 16+ messages in thread
From: Peter Xu @ 2025-04-29 22:30 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel, Fabiano Rosas, John Snow
On Tue, Apr 29, 2025 at 05:21:40PM +0200, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> For automatic tests, we need reference files from older QEMU versions.
> QEMU 7.2 is a long term stable release, so it's a good candidate for
> checking whether the migration could still work correctly. Let's add the
> files from that version that have been taken with the "-dump-vmstate"
> parameter of QEMU (compiled with single machines and the configure switch
> "--without-default-devices" to keep the json files reasonable small).
>
> Some devices also have been removed manually from the json files, e.g.
> the "pci-bridge" (which can be disabled in later QEMU versions via Kconfig),
> and some Linux-related devices like "scsi-block" and "scsi-generic" and
> KVM-related devices. Without removing them, we might get errors otherwise
> if these devices have not been compiled into the destination QEMU build.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> MAINTAINERS | 1 +
> .../aarch64/virt-7.2.json | 2571 +++++++++++++
> .../vmstate-static-checker/m68k/virt-7.2.json | 2936 ++++++++++++++
> .../ppc64/pseries-7.2.json | 1068 ++++++
> .../s390x/s390-ccw-virtio-7.2.json | 475 +++
> .../x86_64/pc-q35-7.2.json | 3402 +++++++++++++++++
> 6 files changed, 10453 insertions(+)
> create mode 100644 tests/data/vmstate-static-checker/aarch64/virt-7.2.json
> create mode 100644 tests/data/vmstate-static-checker/m68k/virt-7.2.json
> create mode 100644 tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
> create mode 100644 tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
> create mode 100644 tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
This looks like an improvement indeed, it so far only covers machine type
7.2, rather than all machine types. I used to run these by hands before
each release.. and sometimes I forgot. Before me, I am aware at least Dave
used to run also during softfreezes.
One thing I am wondering is if we can do it the same way as the compat
migration test in CI, so that we always compare with a base (which is the
previous release binary), then move the base after each release.
After all, due to migration-compat-common CI job, we always build the base
version of QEMU already in build-previous-qemu, so we already have two
binaries at hand. IIUC we only need one new job to generate the two JSON
blobs, and feed them to the checker on both directions.
If that is the case, it might have a benefit that we can cover all the
machines as long as listed on both binaries, then check all of them?
Meanwhile, if we keep the ball rolling for each release (by boosting the
base QEMU binary version), IIUC it guarantees all the new binaries will
make sure to provide compatible VMSDs all across since we start running the
job.
Would that work?
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files
2025-04-29 22:13 ` Peter Xu
@ 2025-04-30 10:55 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2025-04-30 10:55 UTC (permalink / raw)
To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, John Snow
On 30/04/2025 00.13, Peter Xu wrote:
> On Tue, Apr 29, 2025 at 05:21:38PM +0200, Thomas Huth wrote:
>> From: Thomas Huth <thuth@redhat.com>
>>
>> These files reference QEMU machine types that have already been
>> removed and thus are of no use anymore.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>
> I never noticed these files, but when looking it seems to me these two
> dumps are tailored to be used to test the script itself..
>
> See:
>
> $ git ls tests/vmstate-static-checker-data/
> e178113ff6 hw: Replace anti-social QOM type names
> 38ef86b5a6 tests: vmstate static checker: add size mismatch inside substructure
> af3713f6b9 tests: vmstate static checker: add substructure for usb-kbd for hid section
> c7173a9c18 tests: vmstate static checker: remove Subsections
> aa2a12bb82 tests: vmstate static checker: remove a subsection
> b5968f0ab3 tests: vmstate static checker: remove Description inside Fields
> ff29b8573f tests: vmstate static checker: remove Description
> 083bac3484 tests: vmstate static checker: remove Fields
> 1d681c712a tests: vmstate static checker: change description name
> fd52ffb9bf tests: vmstate static checker: remove last field in a struct
> 55e8e0e19c tests: vmstate static checker: remove a field
> ab99bdbe33 tests: vmstate static checker: remove a section
> 7daa3d76df tests: vmstate static checker: minimum_version_id check
> 4efa6e1d64 tests: vmstate static checker: version mismatch inside a Description
> a81d3fad87 tests: vmstate static checker: add version error in main section
> bc178dc563 tests: vmstate static checker: incompat machine types
> a10413e4fc tests: vmstate static checker: add dump1 and dump2 files
>
> So dump2.json was deliberately modified to trigger all kinds of error that
> the python script can detect.
Oh, good point, I should have looked at the history, too! ... the files
clearly lacked an explanation / script that is using them!
> Maybe we can still keep it there, but at least make it clearer that it's
> testing the script? For example, we could create a bash under the same dir
> running the script over the two dumps and comparing the results to be the
> expected one?
>
> Currently the output:
>
> $ scripts/vmstate-static-checker.py -s ./tests/vmstate-static-checker-data/dump1.json -d ./tests/vmstate-static-checker-data/dump2.json
> Warning: checking incompatible machine types: "pc-i440fx-2.1", "pc-i440fx-2.2"
> Section "fw_cfg" does not exist in dest
> Section "fusbh200-ehci-usb" version error: 2 > 1
> Section "fusbh200-ehci-usb", Description "ehci-core": expected field "usbsts", got "usbsts_pending"; skipping rest
> Section "pci-serial-4x" Description "pci-serial-multi": Entry "Fields" missing
> Section "intel-hda-generic", Description "intel-hda", Field "pci": missing description
> Section "cfi.pflash01": Entry "Description" missing
> Section "megasas", Description "PCIDevice": expected field "irq_state", while dest has no further fields
> Section "PIIX3-xen" Description "PIIX3": minimum version error: 1 < 2
> Section "PIIX3-xen" Description "PIIX3": Entry "Subsections" missing
> Section "tpci200": Description "tpci200" missing, got "tpci2002" instead; skipping
> Section "sun-fdtwo" Description "fdc": version error: 2 > 1
> Section "sun-fdtwo", Description "fdrive": Subsection "fdrive/media_rate" not found
> Section "usb-kbd" Description "usb-kbd" Field "kbd.keycodes" size mismatch: 4 , 2
>
> So the bash can make sure the result is exactly that. If we want, we could
> even route that to CI, but I'd say optional.
I can include such a test in the functional python test, no need for a
separate bash script here, I think. I'll try to include that in v2.
Thomas
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17
2025-04-29 22:30 ` Peter Xu
@ 2025-04-30 11:13 ` Thomas Huth
2025-04-30 15:46 ` Peter Xu
0 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2025-04-30 11:13 UTC (permalink / raw)
To: Peter Xu; +Cc: qemu-devel, Fabiano Rosas, John Snow
On 30/04/2025 00.30, Peter Xu wrote:
> On Tue, Apr 29, 2025 at 05:21:40PM +0200, Thomas Huth wrote:
>> From: Thomas Huth <thuth@redhat.com>
>>
>> For automatic tests, we need reference files from older QEMU versions.
>> QEMU 7.2 is a long term stable release, so it's a good candidate for
>> checking whether the migration could still work correctly. Let's add the
>> files from that version that have been taken with the "-dump-vmstate"
>> parameter of QEMU (compiled with single machines and the configure switch
>> "--without-default-devices" to keep the json files reasonable small).
>>
>> Some devices also have been removed manually from the json files, e.g.
>> the "pci-bridge" (which can be disabled in later QEMU versions via Kconfig),
>> and some Linux-related devices like "scsi-block" and "scsi-generic" and
>> KVM-related devices. Without removing them, we might get errors otherwise
>> if these devices have not been compiled into the destination QEMU build.
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>> MAINTAINERS | 1 +
>> .../aarch64/virt-7.2.json | 2571 +++++++++++++
>> .../vmstate-static-checker/m68k/virt-7.2.json | 2936 ++++++++++++++
>> .../ppc64/pseries-7.2.json | 1068 ++++++
>> .../s390x/s390-ccw-virtio-7.2.json | 475 +++
>> .../x86_64/pc-q35-7.2.json | 3402 +++++++++++++++++
>> 6 files changed, 10453 insertions(+)
>> create mode 100644 tests/data/vmstate-static-checker/aarch64/virt-7.2.json
>> create mode 100644 tests/data/vmstate-static-checker/m68k/virt-7.2.json
>> create mode 100644 tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
>> create mode 100644 tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
>> create mode 100644 tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
>
> This looks like an improvement indeed, it so far only covers machine type
> 7.2, rather than all machine types. I used to run these by hands before
> each release.. and sometimes I forgot. Before me, I am aware at least Dave
> used to run also during softfreezes.
Since I had to strip down the dump files quite a bit (compiling QEMU with
--without-default-devices etc.) to avoid errors when the current build is
limited, it's maybe best if you continue checking manually at least once
during the soft-freeze with a non-stripped json file.
> One thing I am wondering is if we can do it the same way as the compat
> migration test in CI, so that we always compare with a base (which is the
> previous release binary), then move the base after each release.
>
> After all, due to migration-compat-common CI job, we always build the base
> version of QEMU already in build-previous-qemu, so we already have two
> binaries at hand. IIUC we only need one new job to generate the two JSON
> blobs, and feed them to the checker on both directions.
>
> If that is the case, it might have a benefit that we can cover all the
> machines as long as listed on both binaries, then check all of them?
>
> Meanwhile, if we keep the ball rolling for each release (by boosting the
> base QEMU binary version), IIUC it guarantees all the new binaries will
> make sure to provide compatible VMSDs all across since we start running the
> job.
>
> Would that work?
I can have a try, though we might need to teach the checker script some more
things first, e.g. it's getting confused if we clean up old and unnecessary
fields like in commit 445d3facffe82788b880107c0849dab9505b33d9 ...
Thomas
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17
2025-04-30 11:13 ` Thomas Huth
@ 2025-04-30 15:46 ` Peter Xu
0 siblings, 0 replies; 16+ messages in thread
From: Peter Xu @ 2025-04-30 15:46 UTC (permalink / raw)
To: Thomas Huth; +Cc: qemu-devel, Fabiano Rosas, John Snow
On Wed, Apr 30, 2025 at 01:13:48PM +0200, Thomas Huth wrote:
> On 30/04/2025 00.30, Peter Xu wrote:
> > On Tue, Apr 29, 2025 at 05:21:40PM +0200, Thomas Huth wrote:
> > > From: Thomas Huth <thuth@redhat.com>
> > >
> > > For automatic tests, we need reference files from older QEMU versions.
> > > QEMU 7.2 is a long term stable release, so it's a good candidate for
> > > checking whether the migration could still work correctly. Let's add the
> > > files from that version that have been taken with the "-dump-vmstate"
> > > parameter of QEMU (compiled with single machines and the configure switch
> > > "--without-default-devices" to keep the json files reasonable small).
> > >
> > > Some devices also have been removed manually from the json files, e.g.
> > > the "pci-bridge" (which can be disabled in later QEMU versions via Kconfig),
> > > and some Linux-related devices like "scsi-block" and "scsi-generic" and
> > > KVM-related devices. Without removing them, we might get errors otherwise
> > > if these devices have not been compiled into the destination QEMU build.
> > >
> > > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > > ---
> > > MAINTAINERS | 1 +
> > > .../aarch64/virt-7.2.json | 2571 +++++++++++++
> > > .../vmstate-static-checker/m68k/virt-7.2.json | 2936 ++++++++++++++
> > > .../ppc64/pseries-7.2.json | 1068 ++++++
> > > .../s390x/s390-ccw-virtio-7.2.json | 475 +++
> > > .../x86_64/pc-q35-7.2.json | 3402 +++++++++++++++++
> > > 6 files changed, 10453 insertions(+)
> > > create mode 100644 tests/data/vmstate-static-checker/aarch64/virt-7.2.json
> > > create mode 100644 tests/data/vmstate-static-checker/m68k/virt-7.2.json
> > > create mode 100644 tests/data/vmstate-static-checker/ppc64/pseries-7.2.json
> > > create mode 100644 tests/data/vmstate-static-checker/s390x/s390-ccw-virtio-7.2.json
> > > create mode 100644 tests/data/vmstate-static-checker/x86_64/pc-q35-7.2.json
> >
> > This looks like an improvement indeed, it so far only covers machine type
> > 7.2, rather than all machine types. I used to run these by hands before
> > each release.. and sometimes I forgot. Before me, I am aware at least Dave
> > used to run also during softfreezes.
>
> Since I had to strip down the dump files quite a bit (compiling QEMU with
> --without-default-devices etc.) to avoid errors when the current build is
> limited, it's maybe best if you continue checking manually at least once
> during the soft-freeze with a non-stripped json file.
Yep, will do (if I won't forget to..).
>
> > One thing I am wondering is if we can do it the same way as the compat
> > migration test in CI, so that we always compare with a base (which is the
> > previous release binary), then move the base after each release.
> >
> > After all, due to migration-compat-common CI job, we always build the base
> > version of QEMU already in build-previous-qemu, so we already have two
> > binaries at hand. IIUC we only need one new job to generate the two JSON
> > blobs, and feed them to the checker on both directions.
> >
> > If that is the case, it might have a benefit that we can cover all the
> > machines as long as listed on both binaries, then check all of them?
> >
> > Meanwhile, if we keep the ball rolling for each release (by boosting the
> > base QEMU binary version), IIUC it guarantees all the new binaries will
> > make sure to provide compatible VMSDs all across since we start running the
> > job.
> >
> > Would that work?
>
> I can have a try, though we might need to teach the checker script some more
> things first, e.g. it's getting confused if we clean up old and unnecessary
> fields like in commit 445d3facffe82788b880107c0849dab9505b33d9 ...
Right, we definitely want to have such job allow_failure set.. And this is
also not the only way to fail it, e.g. I just ran it on the latest 10.0 for
q35-9.2 machine type, then I spot two more failures besides what you fixed
in this series.
x1:bin [migration-staging]$ ../scripts/vmstate-static-checker.py -s ./json.9.2 -d ./json.10.0
Section "sysbus-ahci" does not exist in dest
Section "hpet", Description "hpet": expected field "num_timers", got "num_timers_save"; skipping rest
The first one is caused by a Kconfig change - CONFIG_AHCI used to be
selected via hw/ide on x86, now since there's the new ahci-sysbus.c since
1b26146e898086 in 10.0, vmstate_sysbus_ahci isn't available anymore on x86,
but only selected by hw/arm/Kconfig even if I built the binary using
exactly the same setup.
The 2nd one is a rename which is similarly benign. I'll throw a patch soon
for that.
If one step further.. maybe we could also cache the checker's output for
each (arch, machine type) tuple, then we mark the job fail only if the
output changes. That may help to warn maintainers that something changed
the VMSD so one can have a look. But we could start from simple..
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py
2025-04-29 15:21 ` [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py Thomas Huth
@ 2025-04-30 16:10 ` Pierrick Bouvier
2025-05-01 14:28 ` Peter Xu
0 siblings, 1 reply; 16+ messages in thread
From: Pierrick Bouvier @ 2025-04-30 16:10 UTC (permalink / raw)
To: Thomas Huth, qemu-devel, Fabiano Rosas; +Cc: Peter Xu, John Snow
On 4/29/25 8:21 AM, Thomas Huth wrote:
> From: Thomas Huth <thuth@redhat.com>
>
> We've got this nice vmstate-static-checker.py script that can help
> to detect screw-ups in the migration states. Unfortunately, it's
> currently only run manually, so there could be regressions that nobody
> notices immediately. Let's run it from a functional test automatically
> so that we got at least a basic coverage in each CI run.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> MAINTAINERS | 1 +
> tests/functional/meson.build | 13 +++++++-
> tests/functional/test_vmstate.py | 56 ++++++++++++++++++++++++++++++++
> 3 files changed, 69 insertions(+), 1 deletion(-)
> create mode 100755 tests/functional/test_vmstate.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 65fb61844b3..6a8d81458ad 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3525,6 +3525,7 @@ F: migration/
> F: scripts/vmstate-static-checker.py
> F: tests/data/vmstate-static-checker/
> F: tests/functional/test_migration.py
> +F: tests/functional/test_vmstate.py
> F: tests/qtest/migration/
> F: tests/qtest/migration-*
> F: docs/devel/migration/
> diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> index b317ad42c5a..9f339e626f6 100644
> --- a/tests/functional/meson.build
> +++ b/tests/functional/meson.build
> @@ -76,6 +76,7 @@ tests_generic_bsduser = [
>
> tests_aarch64_system_quick = [
> 'migration',
> + 'vmstate',
> ]
>
> tests_aarch64_system_thorough = [
> @@ -164,6 +165,10 @@ tests_loongarch64_system_thorough = [
> 'loongarch64_virt',
> ]
>
> +tests_m68k_system_quick = [
> + 'vmstate',
> +]
> +
> tests_m68k_system_thorough = [
> 'm68k_mcf5208evb',
> 'm68k_nextcube',
> @@ -230,6 +235,7 @@ tests_ppc_system_thorough = [
>
> tests_ppc64_system_quick = [
> 'migration',
> + 'vmstate',
> ]
>
> tests_ppc64_system_thorough = [
> @@ -265,6 +271,10 @@ tests_rx_system_thorough = [
> 'rx_gdbsim',
> ]
>
> +tests_s390x_system_quick = [
> + 'vmstate',
> +]
> +
> tests_s390x_system_thorough = [
> 's390x_ccw_virtio',
> 's390x_replay',
> @@ -305,8 +315,9 @@ tests_x86_64_system_quick = [
> 'migration',
> 'pc_cpu_hotplug_props',
> 'virtio_version',
> - 'x86_cpu_model_versions',
> + 'vmstate',
> 'vnc',
> + 'x86_cpu_model_versions',
> ]
>
> tests_x86_64_system_thorough = [
> diff --git a/tests/functional/test_vmstate.py b/tests/functional/test_vmstate.py
> new file mode 100755
> index 00000000000..3ba56d580db
> --- /dev/null
> +++ b/tests/functional/test_vmstate.py
> @@ -0,0 +1,56 @@
> +#!/usr/bin/env python3
> +#
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +#
> +# This test runs the vmstate-static-checker script with the current QEMU
> +
> +import subprocess
> +
> +from qemu_test import QemuSystemTest
> +
> +
> +class VmStateTest(QemuSystemTest):
> +
> + def test_vmstate(self):
> + target_machine = {
> + 'aarch64': 'virt-7.2',
> + 'm68k': 'virt-7.2',
> + 'ppc64': 'pseries-7.2',
> + 's390x': 's390-ccw-virtio-7.2',
> + 'x86_64': 'pc-q35-7.2',
> + }
> + self.set_machine(target_machine[self.arch])
> +
> + # Run QEMU to get the current vmstate json file:
> + dst_json = self.scratch_file('dest.json')
> + self.log.info('Dumping vmstate from ' + self.qemu_bin)
> + cp = subprocess.run([self.qemu_bin, '-nodefaults',
> + '-M', target_machine[self.arch],
> + '-dump-vmstate', dst_json],
> + stdout=subprocess.PIPE,
> + stderr=subprocess.STDOUT,
> + text=True)
> + if cp.returncode != 0:
> + self.fail('Running QEMU failed:\n' + cp.stdout)
> + if cp.stdout:
> + self.log.info('QEMU output: ' + cp.stdout)
> +
> + # Check whether the old vmstate json file is still compatible:
> + src_json = self.data_file('..', 'data', 'vmstate-static-checker',
> + self.arch,
> + target_machine[self.arch] + '.json')
> + vmstate_checker = self.data_file('..', '..', 'scripts',
> + 'vmstate-static-checker.py')
> + self.log.info('Comparing vmstate with ' + src_json)
> + cp = subprocess.run([vmstate_checker, '-s', src_json, '-d', dst_json],
> + stdout=subprocess.PIPE,
> + stderr=subprocess.STDOUT,
> + text=True)
> + if cp.returncode != 0:
> + self.fail('Running vmstate-static-checker failed:\n' + cp.stdout)
> + if cp.stdout:
> + self.log.warning('vmstate-static-checker output: ' + cp.stdout)
> +
> +
> +if __name__ == '__main__':
> + QemuSystemTest.main()
Thanks for this series Thomas, it's very useful.
Could we extend this automatically to test migration on all
combinations: {qemu-system-*} x {machine}?
We could generate a single list of references, containing hashes of all
outputs, and a simple and clean command to regenerate all those, and
associated jsons, so we don't pollute qemu code with tons of json.
This way, we can automatically detect that we never regress, not only
from release to release, but commit to commit.
In case we need to update reference, people can point what's the actual
difference in the commit message.
As well, since I took a look into that before, this check is not enough
regarding migration. Beyonds the VMDstate, we should check as well that
the default values of every field are not changed. For instance, we
recently changed the default pauth property of arm cpus, and without a
careful backcompat, it would have break migration. It's a bit more
tricky, since there is nothing available now to dump this (I hacked that
using a custom trace). And definitely not something in the scope of your
series, just worth mentioning.
I hope we can one day get rid of all "Is this change safe regarding
migration?" comments because we know we can trust our CI instead.
Regards,
Pierrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py
2025-04-30 16:10 ` Pierrick Bouvier
@ 2025-05-01 14:28 ` Peter Xu
2025-05-01 15:58 ` Pierrick Bouvier
0 siblings, 1 reply; 16+ messages in thread
From: Peter Xu @ 2025-05-01 14:28 UTC (permalink / raw)
To: Pierrick Bouvier; +Cc: Thomas Huth, qemu-devel, Fabiano Rosas, John Snow
On Wed, Apr 30, 2025 at 09:10:30AM -0700, Pierrick Bouvier wrote:
> On 4/29/25 8:21 AM, Thomas Huth wrote:
> > From: Thomas Huth <thuth@redhat.com>
> >
> > We've got this nice vmstate-static-checker.py script that can help
> > to detect screw-ups in the migration states. Unfortunately, it's
> > currently only run manually, so there could be regressions that nobody
> > notices immediately. Let's run it from a functional test automatically
> > so that we got at least a basic coverage in each CI run.
> >
> > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > ---
> > MAINTAINERS | 1 +
> > tests/functional/meson.build | 13 +++++++-
> > tests/functional/test_vmstate.py | 56 ++++++++++++++++++++++++++++++++
> > 3 files changed, 69 insertions(+), 1 deletion(-)
> > create mode 100755 tests/functional/test_vmstate.py
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 65fb61844b3..6a8d81458ad 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -3525,6 +3525,7 @@ F: migration/
> > F: scripts/vmstate-static-checker.py
> > F: tests/data/vmstate-static-checker/
> > F: tests/functional/test_migration.py
> > +F: tests/functional/test_vmstate.py
> > F: tests/qtest/migration/
> > F: tests/qtest/migration-*
> > F: docs/devel/migration/
> > diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> > index b317ad42c5a..9f339e626f6 100644
> > --- a/tests/functional/meson.build
> > +++ b/tests/functional/meson.build
> > @@ -76,6 +76,7 @@ tests_generic_bsduser = [
> > tests_aarch64_system_quick = [
> > 'migration',
> > + 'vmstate',
> > ]
> > tests_aarch64_system_thorough = [
> > @@ -164,6 +165,10 @@ tests_loongarch64_system_thorough = [
> > 'loongarch64_virt',
> > ]
> > +tests_m68k_system_quick = [
> > + 'vmstate',
> > +]
> > +
> > tests_m68k_system_thorough = [
> > 'm68k_mcf5208evb',
> > 'm68k_nextcube',
> > @@ -230,6 +235,7 @@ tests_ppc_system_thorough = [
> > tests_ppc64_system_quick = [
> > 'migration',
> > + 'vmstate',
> > ]
> > tests_ppc64_system_thorough = [
> > @@ -265,6 +271,10 @@ tests_rx_system_thorough = [
> > 'rx_gdbsim',
> > ]
> > +tests_s390x_system_quick = [
> > + 'vmstate',
> > +]
> > +
> > tests_s390x_system_thorough = [
> > 's390x_ccw_virtio',
> > 's390x_replay',
> > @@ -305,8 +315,9 @@ tests_x86_64_system_quick = [
> > 'migration',
> > 'pc_cpu_hotplug_props',
> > 'virtio_version',
> > - 'x86_cpu_model_versions',
> > + 'vmstate',
> > 'vnc',
> > + 'x86_cpu_model_versions',
> > ]
> > tests_x86_64_system_thorough = [
> > diff --git a/tests/functional/test_vmstate.py b/tests/functional/test_vmstate.py
> > new file mode 100755
> > index 00000000000..3ba56d580db
> > --- /dev/null
> > +++ b/tests/functional/test_vmstate.py
> > @@ -0,0 +1,56 @@
> > +#!/usr/bin/env python3
> > +#
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +#
> > +# This test runs the vmstate-static-checker script with the current QEMU
> > +
> > +import subprocess
> > +
> > +from qemu_test import QemuSystemTest
> > +
> > +
> > +class VmStateTest(QemuSystemTest):
> > +
> > + def test_vmstate(self):
> > + target_machine = {
> > + 'aarch64': 'virt-7.2',
> > + 'm68k': 'virt-7.2',
> > + 'ppc64': 'pseries-7.2',
> > + 's390x': 's390-ccw-virtio-7.2',
> > + 'x86_64': 'pc-q35-7.2',
> > + }
> > + self.set_machine(target_machine[self.arch])
> > +
> > + # Run QEMU to get the current vmstate json file:
> > + dst_json = self.scratch_file('dest.json')
> > + self.log.info('Dumping vmstate from ' + self.qemu_bin)
> > + cp = subprocess.run([self.qemu_bin, '-nodefaults',
> > + '-M', target_machine[self.arch],
> > + '-dump-vmstate', dst_json],
> > + stdout=subprocess.PIPE,
> > + stderr=subprocess.STDOUT,
> > + text=True)
> > + if cp.returncode != 0:
> > + self.fail('Running QEMU failed:\n' + cp.stdout)
> > + if cp.stdout:
> > + self.log.info('QEMU output: ' + cp.stdout)
> > +
> > + # Check whether the old vmstate json file is still compatible:
> > + src_json = self.data_file('..', 'data', 'vmstate-static-checker',
> > + self.arch,
> > + target_machine[self.arch] + '.json')
> > + vmstate_checker = self.data_file('..', '..', 'scripts',
> > + 'vmstate-static-checker.py')
> > + self.log.info('Comparing vmstate with ' + src_json)
> > + cp = subprocess.run([vmstate_checker, '-s', src_json, '-d', dst_json],
> > + stdout=subprocess.PIPE,
> > + stderr=subprocess.STDOUT,
> > + text=True)
> > + if cp.returncode != 0:
> > + self.fail('Running vmstate-static-checker failed:\n' + cp.stdout)
> > + if cp.stdout:
> > + self.log.warning('vmstate-static-checker output: ' + cp.stdout)
> > +
> > +
> > +if __name__ == '__main__':
> > + QemuSystemTest.main()
>
> Thanks for this series Thomas, it's very useful.
> Could we extend this automatically to test migration on all combinations:
> {qemu-system-*} x {machine}?
> We could generate a single list of references, containing hashes of all
> outputs, and a simple and clean command to regenerate all those, and
> associated jsons, so we don't pollute qemu code with tons of json.
I think a major challenge would be false positives, and how to filter
them.. when we put anything into CI.
Side note: yesterday I just wrote a script to do exactly this, by auto
build binaries and check all relevant archs over all machine types
supported. It looks like this:
https://gitlab.com/peterx/qemu/-/commit/c4abfa39f8943cd62f0d982ecb36537df398ae70
The plan is I can run this at the end of each release, though.. not yet for
CI. I also don't have plan to upstream this script, maybe I'll keep it
myself as of now unless someone thinks we should have it.
PS: I just ran it over v9.2..v10.0 over the default 4 archs
(x86,arm,ppc,s390) and a huge list was generated.. I believe most of them
are false positives, I'll delay walking the list for some time.. I
attached the result at the end in case anyone is interested.
>
> This way, we can automatically detect that we never regress, not only from
> release to release, but commit to commit.
>
> In case we need to update reference, people can point what's the actual
> difference in the commit message.
>
> As well, since I took a look into that before, this check is not enough
> regarding migration. Beyonds the VMDstate, we should check as well that the
> default values of every field are not changed. For instance, we recently
> changed the default pauth property of arm cpus, and without a careful
> backcompat, it would have break migration. It's a bit more tricky, since
> there is nothing available now to dump this (I hacked that using a custom
> trace). And definitely not something in the scope of your series, just worth
> mentioning.
>
> I hope we can one day get rid of all "Is this change safe regarding
> migration?" comments because we know we can trust our CI instead.
IMHO it's extremely hard (if not impossible) to guarantee that, because
some migration bug may only trigger in special paths that not always
happen, e.g. it can even involve guest driver behavior.
Said that, Fabiano used to work on supporting device-specific tests in
qtests/migration-test.c. I don't think it landed but maybe we have room
for specific device tests using qtests/migration-test.c framework.
https://lore.kernel.org/all/20240523201922.28007-1-farosas@suse.de/
Thanks,
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py
2025-05-01 14:28 ` Peter Xu
@ 2025-05-01 15:58 ` Pierrick Bouvier
2025-05-06 22:05 ` Peter Xu
0 siblings, 1 reply; 16+ messages in thread
From: Pierrick Bouvier @ 2025-05-01 15:58 UTC (permalink / raw)
To: Peter Xu; +Cc: Thomas Huth, qemu-devel, Fabiano Rosas, John Snow
On 5/1/25 7:28 AM, Peter Xu wrote:
> On Wed, Apr 30, 2025 at 09:10:30AM -0700, Pierrick Bouvier wrote:
>> On 4/29/25 8:21 AM, Thomas Huth wrote:
>>> From: Thomas Huth <thuth@redhat.com>
>>>
>>> We've got this nice vmstate-static-checker.py script that can help
>>> to detect screw-ups in the migration states. Unfortunately, it's
>>> currently only run manually, so there could be regressions that nobody
>>> notices immediately. Let's run it from a functional test automatically
>>> so that we got at least a basic coverage in each CI run.
>>>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>> MAINTAINERS | 1 +
>>> tests/functional/meson.build | 13 +++++++-
>>> tests/functional/test_vmstate.py | 56 ++++++++++++++++++++++++++++++++
>>> 3 files changed, 69 insertions(+), 1 deletion(-)
>>> create mode 100755 tests/functional/test_vmstate.py
>>>
>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>> index 65fb61844b3..6a8d81458ad 100644
>>> --- a/MAINTAINERS
>>> +++ b/MAINTAINERS
>>> @@ -3525,6 +3525,7 @@ F: migration/
>>> F: scripts/vmstate-static-checker.py
>>> F: tests/data/vmstate-static-checker/
>>> F: tests/functional/test_migration.py
>>> +F: tests/functional/test_vmstate.py
>>> F: tests/qtest/migration/
>>> F: tests/qtest/migration-*
>>> F: docs/devel/migration/
>>> diff --git a/tests/functional/meson.build b/tests/functional/meson.build
>>> index b317ad42c5a..9f339e626f6 100644
>>> --- a/tests/functional/meson.build
>>> +++ b/tests/functional/meson.build
>>> @@ -76,6 +76,7 @@ tests_generic_bsduser = [
>>> tests_aarch64_system_quick = [
>>> 'migration',
>>> + 'vmstate',
>>> ]
>>> tests_aarch64_system_thorough = [
>>> @@ -164,6 +165,10 @@ tests_loongarch64_system_thorough = [
>>> 'loongarch64_virt',
>>> ]
>>> +tests_m68k_system_quick = [
>>> + 'vmstate',
>>> +]
>>> +
>>> tests_m68k_system_thorough = [
>>> 'm68k_mcf5208evb',
>>> 'm68k_nextcube',
>>> @@ -230,6 +235,7 @@ tests_ppc_system_thorough = [
>>> tests_ppc64_system_quick = [
>>> 'migration',
>>> + 'vmstate',
>>> ]
>>> tests_ppc64_system_thorough = [
>>> @@ -265,6 +271,10 @@ tests_rx_system_thorough = [
>>> 'rx_gdbsim',
>>> ]
>>> +tests_s390x_system_quick = [
>>> + 'vmstate',
>>> +]
>>> +
>>> tests_s390x_system_thorough = [
>>> 's390x_ccw_virtio',
>>> 's390x_replay',
>>> @@ -305,8 +315,9 @@ tests_x86_64_system_quick = [
>>> 'migration',
>>> 'pc_cpu_hotplug_props',
>>> 'virtio_version',
>>> - 'x86_cpu_model_versions',
>>> + 'vmstate',
>>> 'vnc',
>>> + 'x86_cpu_model_versions',
>>> ]
>>> tests_x86_64_system_thorough = [
>>> diff --git a/tests/functional/test_vmstate.py b/tests/functional/test_vmstate.py
>>> new file mode 100755
>>> index 00000000000..3ba56d580db
>>> --- /dev/null
>>> +++ b/tests/functional/test_vmstate.py
>>> @@ -0,0 +1,56 @@
>>> +#!/usr/bin/env python3
>>> +#
>>> +# SPDX-License-Identifier: GPL-2.0-or-later
>>> +#
>>> +# This test runs the vmstate-static-checker script with the current QEMU
>>> +
>>> +import subprocess
>>> +
>>> +from qemu_test import QemuSystemTest
>>> +
>>> +
>>> +class VmStateTest(QemuSystemTest):
>>> +
>>> + def test_vmstate(self):
>>> + target_machine = {
>>> + 'aarch64': 'virt-7.2',
>>> + 'm68k': 'virt-7.2',
>>> + 'ppc64': 'pseries-7.2',
>>> + 's390x': 's390-ccw-virtio-7.2',
>>> + 'x86_64': 'pc-q35-7.2',
>>> + }
>>> + self.set_machine(target_machine[self.arch])
>>> +
>>> + # Run QEMU to get the current vmstate json file:
>>> + dst_json = self.scratch_file('dest.json')
>>> + self.log.info('Dumping vmstate from ' + self.qemu_bin)
>>> + cp = subprocess.run([self.qemu_bin, '-nodefaults',
>>> + '-M', target_machine[self.arch],
>>> + '-dump-vmstate', dst_json],
>>> + stdout=subprocess.PIPE,
>>> + stderr=subprocess.STDOUT,
>>> + text=True)
>>> + if cp.returncode != 0:
>>> + self.fail('Running QEMU failed:\n' + cp.stdout)
>>> + if cp.stdout:
>>> + self.log.info('QEMU output: ' + cp.stdout)
>>> +
>>> + # Check whether the old vmstate json file is still compatible:
>>> + src_json = self.data_file('..', 'data', 'vmstate-static-checker',
>>> + self.arch,
>>> + target_machine[self.arch] + '.json')
>>> + vmstate_checker = self.data_file('..', '..', 'scripts',
>>> + 'vmstate-static-checker.py')
>>> + self.log.info('Comparing vmstate with ' + src_json)
>>> + cp = subprocess.run([vmstate_checker, '-s', src_json, '-d', dst_json],
>>> + stdout=subprocess.PIPE,
>>> + stderr=subprocess.STDOUT,
>>> + text=True)
>>> + if cp.returncode != 0:
>>> + self.fail('Running vmstate-static-checker failed:\n' + cp.stdout)
>>> + if cp.stdout:
>>> + self.log.warning('vmstate-static-checker output: ' + cp.stdout)
>>> +
>>> +
>>> +if __name__ == '__main__':
>>> + QemuSystemTest.main()
>>
>> Thanks for this series Thomas, it's very useful.
>> Could we extend this automatically to test migration on all combinations:
>> {qemu-system-*} x {machine}?
>> We could generate a single list of references, containing hashes of all
>> outputs, and a simple and clean command to regenerate all those, and
>> associated jsons, so we don't pollute qemu code with tons of json.
>
> I think a major challenge would be false positives, and how to filter
> them.. when we put anything into CI.
>
A fail would be expected everytime something changes:
- it can be a default field that has a new value (particularly sensitive
for cpus)
- it can be a new cpu field that is added
- it can be a board definition change
- it can be a hardware related change
In all cases, even though it does not break migration, it's interesting
to know such a change happen.
As well, if it's simple to update and get differences of the various
dumps per {binary, board}, then it's trivial to identify and comment the
"false positive". The more often it runs (ideally, per PR, or per
series), the easier it is to identify what changed.
> Side note: yesterday I just wrote a script to do exactly this, by auto
> build binaries and check all relevant archs over all machine types
> supported. It looks like this:
>
> https://gitlab.com/peterx/qemu/-/commit/c4abfa39f8943cd62f0d982ecb36537df398ae70
>
> The plan is I can run this at the end of each release, though.. not yet for
> CI. I also don't have plan to upstream this script, maybe I'll keep it
> myself as of now unless someone thinks we should have it.
>
Glad to hear we have a script, but sad to hear "will run manually once
every 6 months".
> PS: I just ran it over v9.2..v10.0 over the default 4 archs
> (x86,arm,ppc,s390) and a huge list was generated.. I believe most of them
> are false positives, I'll delay walking the list for some time.. I
> attached the result at the end in case anyone is interested.
>
Would that be possible to post this on an online forge like GitLab, and
commit the previous and new versions of dumps (the data, not the list of
failures), so we can see all the differences in a nice way?
>>
>> This way, we can automatically detect that we never regress, not only from
>> release to release, but commit to commit.
>>
>> In case we need to update reference, people can point what's the actual
>> difference in the commit message.
>>
>> As well, since I took a look into that before, this check is not enough
>> regarding migration. Beyonds the VMDstate, we should check as well that the
>> default values of every field are not changed. For instance, we recently
>> changed the default pauth property of arm cpus, and without a careful
>> backcompat, it would have break migration. It's a bit more tricky, since
>> there is nothing available now to dump this (I hacked that using a custom
>> trace). And definitely not something in the scope of your series, just worth
>> mentioning.
>>
>> I hope we can one day get rid of all "Is this change safe regarding
>> migration?" comments because we know we can trust our CI instead.
>
> IMHO it's extremely hard (if not impossible) to guarantee that, because
> some migration bug may only trigger in special paths that not always
> happen, e.g. it can even involve guest driver behavior.
>
It would not cover 100%, but if we already make sure that a VM stopped
at end of qemu_init() has a predictable dump, it's already a huge win
over having nothing.
We can use the same argument that current QEMU CI does not cover 100% of
the code (*much* less than that from what I tried), but it's still
better than no test.
> Said that, Fabiano used to work on supporting device-specific tests in
> qtests/migration-test.c. I don't think it landed but maybe we have room
> for specific device tests using qtests/migration-test.c framework.
>
> https://lore.kernel.org/all/20240523201922.28007-1-farosas@suse.de/
>
> Thanks,
>
Regards,
Pierrick
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py
2025-05-01 15:58 ` Pierrick Bouvier
@ 2025-05-06 22:05 ` Peter Xu
0 siblings, 0 replies; 16+ messages in thread
From: Peter Xu @ 2025-05-06 22:05 UTC (permalink / raw)
To: Pierrick Bouvier; +Cc: Thomas Huth, qemu-devel, Fabiano Rosas, John Snow
On Thu, May 01, 2025 at 08:58:33AM -0700, Pierrick Bouvier wrote:
> On 5/1/25 7:28 AM, Peter Xu wrote:
> > On Wed, Apr 30, 2025 at 09:10:30AM -0700, Pierrick Bouvier wrote:
> > > On 4/29/25 8:21 AM, Thomas Huth wrote:
> > > > From: Thomas Huth <thuth@redhat.com>
> > > >
> > > > We've got this nice vmstate-static-checker.py script that can help
> > > > to detect screw-ups in the migration states. Unfortunately, it's
> > > > currently only run manually, so there could be regressions that nobody
> > > > notices immediately. Let's run it from a functional test automatically
> > > > so that we got at least a basic coverage in each CI run.
> > > >
> > > > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > > > ---
> > > > MAINTAINERS | 1 +
> > > > tests/functional/meson.build | 13 +++++++-
> > > > tests/functional/test_vmstate.py | 56 ++++++++++++++++++++++++++++++++
> > > > 3 files changed, 69 insertions(+), 1 deletion(-)
> > > > create mode 100755 tests/functional/test_vmstate.py
> > > >
> > > > diff --git a/MAINTAINERS b/MAINTAINERS
> > > > index 65fb61844b3..6a8d81458ad 100644
> > > > --- a/MAINTAINERS
> > > > +++ b/MAINTAINERS
> > > > @@ -3525,6 +3525,7 @@ F: migration/
> > > > F: scripts/vmstate-static-checker.py
> > > > F: tests/data/vmstate-static-checker/
> > > > F: tests/functional/test_migration.py
> > > > +F: tests/functional/test_vmstate.py
> > > > F: tests/qtest/migration/
> > > > F: tests/qtest/migration-*
> > > > F: docs/devel/migration/
> > > > diff --git a/tests/functional/meson.build b/tests/functional/meson.build
> > > > index b317ad42c5a..9f339e626f6 100644
> > > > --- a/tests/functional/meson.build
> > > > +++ b/tests/functional/meson.build
> > > > @@ -76,6 +76,7 @@ tests_generic_bsduser = [
> > > > tests_aarch64_system_quick = [
> > > > 'migration',
> > > > + 'vmstate',
> > > > ]
> > > > tests_aarch64_system_thorough = [
> > > > @@ -164,6 +165,10 @@ tests_loongarch64_system_thorough = [
> > > > 'loongarch64_virt',
> > > > ]
> > > > +tests_m68k_system_quick = [
> > > > + 'vmstate',
> > > > +]
> > > > +
> > > > tests_m68k_system_thorough = [
> > > > 'm68k_mcf5208evb',
> > > > 'm68k_nextcube',
> > > > @@ -230,6 +235,7 @@ tests_ppc_system_thorough = [
> > > > tests_ppc64_system_quick = [
> > > > 'migration',
> > > > + 'vmstate',
> > > > ]
> > > > tests_ppc64_system_thorough = [
> > > > @@ -265,6 +271,10 @@ tests_rx_system_thorough = [
> > > > 'rx_gdbsim',
> > > > ]
> > > > +tests_s390x_system_quick = [
> > > > + 'vmstate',
> > > > +]
> > > > +
> > > > tests_s390x_system_thorough = [
> > > > 's390x_ccw_virtio',
> > > > 's390x_replay',
> > > > @@ -305,8 +315,9 @@ tests_x86_64_system_quick = [
> > > > 'migration',
> > > > 'pc_cpu_hotplug_props',
> > > > 'virtio_version',
> > > > - 'x86_cpu_model_versions',
> > > > + 'vmstate',
> > > > 'vnc',
> > > > + 'x86_cpu_model_versions',
> > > > ]
> > > > tests_x86_64_system_thorough = [
> > > > diff --git a/tests/functional/test_vmstate.py b/tests/functional/test_vmstate.py
> > > > new file mode 100755
> > > > index 00000000000..3ba56d580db
> > > > --- /dev/null
> > > > +++ b/tests/functional/test_vmstate.py
> > > > @@ -0,0 +1,56 @@
> > > > +#!/usr/bin/env python3
> > > > +#
> > > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > > +#
> > > > +# This test runs the vmstate-static-checker script with the current QEMU
> > > > +
> > > > +import subprocess
> > > > +
> > > > +from qemu_test import QemuSystemTest
> > > > +
> > > > +
> > > > +class VmStateTest(QemuSystemTest):
> > > > +
> > > > + def test_vmstate(self):
> > > > + target_machine = {
> > > > + 'aarch64': 'virt-7.2',
> > > > + 'm68k': 'virt-7.2',
> > > > + 'ppc64': 'pseries-7.2',
> > > > + 's390x': 's390-ccw-virtio-7.2',
> > > > + 'x86_64': 'pc-q35-7.2',
> > > > + }
> > > > + self.set_machine(target_machine[self.arch])
> > > > +
> > > > + # Run QEMU to get the current vmstate json file:
> > > > + dst_json = self.scratch_file('dest.json')
> > > > + self.log.info('Dumping vmstate from ' + self.qemu_bin)
> > > > + cp = subprocess.run([self.qemu_bin, '-nodefaults',
> > > > + '-M', target_machine[self.arch],
> > > > + '-dump-vmstate', dst_json],
> > > > + stdout=subprocess.PIPE,
> > > > + stderr=subprocess.STDOUT,
> > > > + text=True)
> > > > + if cp.returncode != 0:
> > > > + self.fail('Running QEMU failed:\n' + cp.stdout)
> > > > + if cp.stdout:
> > > > + self.log.info('QEMU output: ' + cp.stdout)
> > > > +
> > > > + # Check whether the old vmstate json file is still compatible:
> > > > + src_json = self.data_file('..', 'data', 'vmstate-static-checker',
> > > > + self.arch,
> > > > + target_machine[self.arch] + '.json')
> > > > + vmstate_checker = self.data_file('..', '..', 'scripts',
> > > > + 'vmstate-static-checker.py')
> > > > + self.log.info('Comparing vmstate with ' + src_json)
> > > > + cp = subprocess.run([vmstate_checker, '-s', src_json, '-d', dst_json],
> > > > + stdout=subprocess.PIPE,
> > > > + stderr=subprocess.STDOUT,
> > > > + text=True)
> > > > + if cp.returncode != 0:
> > > > + self.fail('Running vmstate-static-checker failed:\n' + cp.stdout)
> > > > + if cp.stdout:
> > > > + self.log.warning('vmstate-static-checker output: ' + cp.stdout)
> > > > +
> > > > +
> > > > +if __name__ == '__main__':
> > > > + QemuSystemTest.main()
> > >
> > > Thanks for this series Thomas, it's very useful.
> > > Could we extend this automatically to test migration on all combinations:
> > > {qemu-system-*} x {machine}?
> > > We could generate a single list of references, containing hashes of all
> > > outputs, and a simple and clean command to regenerate all those, and
> > > associated jsons, so we don't pollute qemu code with tons of json.
> >
> > I think a major challenge would be false positives, and how to filter
> > them.. when we put anything into CI.
> >
>
> A fail would be expected everytime something changes:
> - it can be a default field that has a new value (particularly sensitive for
> cpus)
> - it can be a new cpu field that is added
> - it can be a board definition change
> - it can be a hardware related change
>
> In all cases, even though it does not break migration, it's interesting to
> know such a change happen.
> As well, if it's simple to update and get differences of the various dumps
> per {binary, board}, then it's trivial to identify and comment the "false
> positive". The more often it runs (ideally, per PR, or per series), the
> easier it is to identify what changed.
>
> > Side note: yesterday I just wrote a script to do exactly this, by auto
> > build binaries and check all relevant archs over all machine types
> > supported. It looks like this:
> >
> > https://gitlab.com/peterx/qemu/-/commit/c4abfa39f8943cd62f0d982ecb36537df398ae70
> >
> > The plan is I can run this at the end of each release, though.. not yet for
> > CI. I also don't have plan to upstream this script, maybe I'll keep it
> > myself as of now unless someone thinks we should have it.
> >
>
> Glad to hear we have a script, but sad to hear "will run manually once every
> 6 months".
>
> > PS: I just ran it over v9.2..v10.0 over the default 4 archs
> > (x86,arm,ppc,s390) and a huge list was generated.. I believe most of them
> > are false positives, I'll delay walking the list for some time.. I
> > attached the result at the end in case anyone is interested.
> >
I probably forgot to do that. Here's the condensed list, and this time I
went throught it, even though I found zero real bug.. so all false
positives, AFAICT..
Found forward migration incompatibility issues:
Section "acpi-ged", Description "acpi-ghes": expected field "ghes_addr_le", got "hw_error_le"; skipping rest
Section "sysbus-ahci" does not exist in dest
Section "imx.enet" Section "imx.enet" Description "imx.fec": minimum version error: 2 < 3
Section "imx.enet", Description "imx.fec": expected field "phy_status", while dest has no further fields
Section "npcm7xx-clk" Section "npcm7xx-clk" Description "npcm7xx-clk": minimum version error: 1 < 3
Section "npcm7xx-clk": Description "npcm7xx-clk" missing, got "npcm-clk" instead; skipping
Section "npcm7xx-gcr" Section "npcm7xx-gcr" Description "npcm7xx-gcr": minimum version error: 0 < 2
Section "npcm7xx-gcr": Description "npcm7xx-gcr" missing, got "npcm-gcr" instead; skipping
Section "lan9118" Section "lan9118" Description "lan9118": minimum version error: 2 < 3
Section "lan9118", Description "lan9118": expected field "phy_status", got "eeprom_writable"; skipping rest
Section "imx.fec" Section "imx.fec" Description "imx.fec": minimum version error: 2 < 3
Section "imx.fec", Description "imx.fec": expected field "phy_status", while dest has no further fields
Found backward migration incompatibility issues:
Section "uefi-vars-sysbus" does not exist in dest
Section "acpi-ged", Description "acpi-ghes": expected field "hw_error_le", got "ghes_addr_le"; skipping rest
Section "uefi-vars-x64" does not exist in dest
Section "vmclock" does not exist in dest
Section "virtio-mem" does not exist in dest
Section "npcm8xx-gcr" does not exist in dest
Section "imx.enet" version error: 3 > 2
Section "imx.enet" Description "imx.fec": version error: 3 > 2
Section "rs5c372" does not exist in dest
Section "imx8mp.analog" does not exist in dest
Section "npcm7xx-clk" version error: 3 > 1
Section "npcm7xx-clk" Description "npcm-clk": version error: 3 > 1
Section "npcm7xx-clk": Description "npcm-clk" missing, got "npcm7xx-clk" instead; skipping
Section "imx8mp.ccm" does not exist in dest
Section "npcm7xx-gcr" version error: 2 > 0
Section "npcm7xx-gcr" Description "npcm-gcr": version error: 2 > 0
Section "npcm7xx-gcr": Description "npcm-gcr" missing, got "npcm7xx-gcr" instead; skipping
Section "fsl-imx8m-pcie-phy" does not exist in dest
Section "imx8mp.gpt" does not exist in dest
Section "lan9118" version error: 3 > 2
Section "lan9118" Description "lan9118": version error: 3 > 2
Section "lan9118", Description "lan9118": expected field "eeprom_writable", got "phy_status"; skipping rest
Section "imx.fec" version error: 3 > 2
Section "imx.fec" Description "imx.fec": version error: 3 > 2
Section "lan9118-phy" does not exist in dest
Section "aspeed.hace-ast2700" does not exist in dest
Section "npcm-clk" does not exist in dest
Section "aspeed.sdhci-ast2400" does not exist in dest
Section "npcm-gcr" does not exist in dest
Section "aspeed.sdhci-ast2500" does not exist in dest
Section "npcm-pcs" does not exist in dest
Section "aspeed.sdhci-ast2600" does not exist in dest
Section "aspeed.timer-ast2700" does not exist in dest
Section "npcm8xx-clk" does not exist in dest
Section "aspeed.sdhci-ast2700" does not exist in dest
>
> Would that be possible to post this on an online forge like GitLab, and
> commit the previous and new versions of dumps (the data, not the list of
> failures), so we can see all the differences in a nice way?
It should be easy to do, but now I'm thinking how much it would help
developers.
As discussed above, I finally went through the list for the previous
release cycle, and I see no real positive reports.
It could be that the script used to be able to capture more real issues,
but as more developers / maintainers got reports, then such issues are less
likely to happen. Do any of us used that to find any real bug recently?
I also start to doubt whether we should keep growing the renaming list.
First of all, such list isn't that helpful if we don't run that on old
enough binaries - the rename will not cause false positive anymore as long
as we compare newer binaries from the commit it got changed. So if we run
it per-release the rename will only bother us once per release..
>
> > >
> > > This way, we can automatically detect that we never regress, not only from
> > > release to release, but commit to commit.
> > >
> > > In case we need to update reference, people can point what's the actual
> > > difference in the commit message.
> > >
> > > As well, since I took a look into that before, this check is not enough
> > > regarding migration. Beyonds the VMDstate, we should check as well that the
> > > default values of every field are not changed. For instance, we recently
> > > changed the default pauth property of arm cpus, and without a careful
> > > backcompat, it would have break migration. It's a bit more tricky, since
> > > there is nothing available now to dump this (I hacked that using a custom
> > > trace). And definitely not something in the scope of your series, just worth
> > > mentioning.
> > >
> > > I hope we can one day get rid of all "Is this change safe regarding
> > > migration?" comments because we know we can trust our CI instead.
> >
> > IMHO it's extremely hard (if not impossible) to guarantee that, because
> > some migration bug may only trigger in special paths that not always
> > happen, e.g. it can even involve guest driver behavior.
> >
>
> It would not cover 100%, but if we already make sure that a VM stopped at
> end of qemu_init() has a predictable dump, it's already a huge win over
> having nothing.
> We can use the same argument that current QEMU CI does not cover 100% of the
> code (*much* less than that from what I tried), but it's still better than
> no test.
So now I start to question whether we need to work more on the whole
vmstate static checker.. I think I'll still try to keep running it once
per release for some while, but if I can't catch any real bug maybe we're
good from this regard, and people just started being very cautious on
e.g. randomly adding or removing vmsd fields.
Let me know if anyone thinks it differently..
Thanks,
--
Peter Xu
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-05-06 22:06 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-29 15:21 [PATCH 0/4] Test vmstate with scripts/vmstate-static-checker.py Thomas Huth
2025-04-29 15:21 ` [PATCH 1/4] tests/vmstate-static-checker-data: Remove old dump files Thomas Huth
2025-04-29 15:29 ` Philippe Mathieu-Daudé
2025-04-29 22:13 ` Peter Xu
2025-04-30 10:55 ` Thomas Huth
2025-04-29 15:21 ` [PATCH 2/4] scripts/vmstate-static-checker.py: Allow new name for ghes_addr_le field Thomas Huth
2025-04-29 22:16 ` Peter Xu
2025-04-29 15:21 ` [PATCH 3/4] tests/data/vmstate-static-checker: Add dump files from QEMU 7.2.17 Thomas Huth
2025-04-29 22:30 ` Peter Xu
2025-04-30 11:13 ` Thomas Huth
2025-04-30 15:46 ` Peter Xu
2025-04-29 15:21 ` [PATCH 4/4] tests/functional: Test with scripts/vmstate-static-checker.py Thomas Huth
2025-04-30 16:10 ` Pierrick Bouvier
2025-05-01 14:28 ` Peter Xu
2025-05-01 15:58 ` Pierrick Bouvier
2025-05-06 22:05 ` Peter Xu
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).