>From 43fb56c4ee68905d886ea21dad338f3e76350ba5 Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Tue, 22 Mar 2011 08:21:00 -0500 Subject: [PATCH] vl: add -dump-savevm option to display VMState schema This can be used to verify whether the savevm schema has changed for a given version of the migration protocol. Signed-off-by: Anthony Liguori --- hw/hw.h | 2 ++ qemu-options.hx | 9 +++++++++ savevm.c | 22 ++++++++++++++++++++++ vl.c | 9 +++++++++ 4 files changed, 42 insertions(+), 0 deletions(-) diff --git a/hw/hw.h b/hw/hw.h index 1b09039..55816da 100644 --- a/hw/hw.h +++ b/hw/hw.h @@ -914,4 +914,6 @@ int vmstate_register_with_alias_id(DeviceState *dev, int instance_id, int required_for_version); void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd, void *opaque); +void vmstate_dump(FILE *f, int version); + #endif diff --git a/qemu-options.hx b/qemu-options.hx index badb730..801757b 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2349,6 +2349,15 @@ Specify a trace file to log output traces to. ETEXI #endif +DEF("dump-savevm", HAS_ARG, QEMU_OPTION_dump_savevm, + "-dump-savevm VERSION\n" + " dump the savevm schema for a given version\n", + QEMU_ARCH_ALL) +STEXI address@hidden -dump-savevm address@hidden -dump-savevm +ETEXI + HXCOMM This is the last statement. Insert new options before this line! STEXI @end table diff --git a/savevm.c b/savevm.c index 03fce62..da1fea1 100644 --- a/savevm.c +++ b/savevm.c @@ -1436,6 +1436,28 @@ static void vmstate_save(QEMUFile *f, SaveStateEntry *se) vmstate_save_state(f,se->vmsd, se->opaque); } +void vmstate_dump(FILE *f, int version) +{ + SaveStateEntry *se; + bool first = true; + + QTAILQ_FOREACH(se, &savevm_handlers, entry) { + VMStateField *field; + if (!se->vmsd) { + continue; + } + if (first) { + first = false; + } else { + fprintf(f, "\n"); + } + fprintf(f, "%s.__version__ = %d\n", se->vmsd->name, se->version_id); + for (field = se->vmsd->fields; field->name; field++) { + fprintf(f, "%s.%s\n", se->vmsd->name, field->name); + } + } +} + #define QEMU_VM_FILE_MAGIC 0x5145564d #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002 #define QEMU_VM_FILE_VERSION 0x00000003 diff --git a/vl.c b/vl.c index ac47211..361fcef 100644 --- a/vl.c +++ b/vl.c @@ -1941,6 +1941,7 @@ int main(int argc, char **argv, char **envp) int show_vnc_port = 0; int defconfig = 1; const char *trace_file = NULL; + int dump_savevm = -1; atexit(qemu_run_exit_notifiers); error_set_progname(argv[0]); @@ -2760,6 +2761,9 @@ int main(int argc, char **argv, char **envp) fclose(fp); break; } + case QEMU_OPTION_dump_savevm: + dump_savevm = atoi(optarg); + break; default: os_parse_cmd_args(popt->index, optarg); } @@ -3013,6 +3017,11 @@ int main(int argc, char **argv, char **envp) cpu_synchronize_all_post_init(); + if (dump_savevm != -1) { + vmstate_dump(stdout, dump_savevm); + exit(0); + } + /* must be after terminal init, SDL library changes signal handlers */ os_setup_signal_handling(); -- 1.7.0.4