summary refs log tree commit diff stats
path: root/vl.c
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2014-06-20 18:56:08 +0530
committerJuan Quintela <quintela@redhat.com>2014-06-23 19:14:50 +0200
commitabfd9ce341ec66eb2e63756b9da43f77c054788e (patch)
tree025a056ec9e74179c8b4ca4971b30cc06c261281 /vl.c
parente325b49a320b493cc5d69e263751ff716dc458fe (diff)
downloadfocaccia-qemu-abfd9ce341ec66eb2e63756b9da43f77c054788e.tar.gz
focaccia-qemu-abfd9ce341ec66eb2e63756b9da43f77c054788e.zip
migration: dump vmstate info as a json file for static analysis
This commit adds a new command, '-dump-vmstate', that takes a filename
as an argument.  When executed, QEMU will dump the vmstate information
for the machine type it's invoked with to the file, and quit.

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

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

Signed-off-by: Amit Shah <amit.shah@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'vl.c')
-rw-r--r--vl.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/vl.c b/vl.c
index ab8f15243b..32887559be 100644
--- a/vl.c
+++ b/vl.c
@@ -2935,6 +2935,7 @@ int main(int argc, char **argv, char **envp)
                                         1024 * 1024;
     ram_addr_t maxram_size = default_ram_size;
     uint64_t ram_slots = 0;
+    FILE *vmstate_dump_file = NULL;
 
     atexit(qemu_run_exit_notifiers);
     error_set_progname(argv[0]);
@@ -3944,6 +3945,13 @@ int main(int argc, char **argv, char **envp)
                 }
                 configure_msg(opts);
                 break;
+            case QEMU_OPTION_dump_vmstate:
+                vmstate_dump_file = fopen(optarg, "w");
+                if (vmstate_dump_file == NULL) {
+                    fprintf(stderr, "open %s: %s\n", optarg, strerror(errno));
+                    exit(1);
+                }
+                break;
             default:
                 os_parse_cmd_args(popt->index, optarg);
             }
@@ -4495,6 +4503,11 @@ int main(int argc, char **argv, char **envp)
     }
 
     qdev_prop_check_global();
+    if (vmstate_dump_file) {
+        /* dump and exit */
+        dump_vmstate_json_to_file(vmstate_dump_file);
+        return 0;
+    }
 
     if (incoming) {
         Error *local_err = NULL;