When built with --enable-qdev-debug, QEMU displays warnings listing devices missing migration state:
$ qemu-system-arm -S -M spitz qemu-system-arm: warning: missing migration state for type: 'pxa270-c0-arm-cpu' qemu-system-arm: warning: missing migration state for type: 'serial' qemu-system-arm: warning: missing migration state for type: 'pxa2xx-pcmcia' qemu-system-arm: warning: missing migration state for type: 'pxa2xx-pcmcia' qemu-system-arm: warning: missing migration state for type: 'pxa2xx-i2c-slave' qemu-system-arm: warning: missing migration state for type: 'pxa2xx-i2c-slave' qemu-system-arm: warning: missing migration state for type: 'ads7846' qemu-system-arm: warning: missing migration state for type: 'max1111' Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- Unresolved issue: https://www.mail-archive.com/qemu-devel@nongnu.org/msg721700.html Peter: > I think where we'd like to get to is installing a migration > blocker if the machine has any devices which don't have a vmsd. > But for that we'd need to be pretty sure we'd got all the devices > on machines where we care about migration, and we're clearly a > fair way from that (eg we need to do something about the > devices like the CPU which don't have a vmsd but handle their > migration some other way so they don't trigger the condition > for warning/migration-blocker). --- configure | 10 ++++++++++ meson.build | 1 + hw/core/qdev.c | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/configure b/configure index 155dda124c2..984befbb99d 100755 --- a/configure +++ b/configure @@ -383,6 +383,7 @@ blobs="true" pkgversion="" pie="" qom_cast_debug="yes" +qdev_debug="no" trace_backends="log" trace_file="trace" spice="$default_feature" @@ -1005,6 +1006,10 @@ for opt do ;; --enable-qom-cast-debug) qom_cast_debug="yes" ;; + --disable-qdev-debug) qdev_debug="no" + ;; + --enable-qdev-debug) qdev_debug="yes" + ;; --disable-virtfs) virtfs="disabled" ;; --enable-virtfs) virtfs="enabled" @@ -1048,6 +1053,7 @@ for opt do debug="yes" strip_opt="no" fortify_source="no" + qdev_debug="yes" ;; --enable-sanitizers) sanitizers="yes" ;; @@ -5912,6 +5918,10 @@ if test "$qom_cast_debug" = "yes" ; then echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak fi +if test "$qdev_debug" = "yes" ; then + echo "CONFIG_QDEV_DEBUG=y" >> $config_host_mak +fi + echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak if test "$coroutine_pool" = "yes" ; then echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak diff --git a/meson.build b/meson.build index 3d889857a09..545c8f9f88b 100644 --- a/meson.build +++ b/meson.build @@ -2472,6 +2472,7 @@ summary_info += {'TPM support': config_host.has_key('CONFIG_TPM')} summary_info += {'libssh support': config_host.has_key('CONFIG_LIBSSH')} summary_info += {'QOM debugging': config_host.has_key('CONFIG_QOM_CAST_DEBUG')} +summary_info += {'QDEV debugging': config_host.has_key('CONFIG_QDEV_DEBUG')} summary_info += {'Live block migration': config_host.has_key('CONFIG_LIVE_BLOCK_MIGRATION')} summary_info += {'lzo support': lzo.found()} summary_info += {'snappy support': snappy.found()} diff --git a/hw/core/qdev.c b/hw/core/qdev.c index f0d0afd438d..9a73a242fa4 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -792,6 +792,11 @@ static void device_set_realized(Object *obj, bool value, Error **errp) &local_err) < 0) { goto post_realize_fail; } + } else { +#ifdef CONFIG_QDEV_DEBUG + warn_report("missing migration state for type: '%s'", + object_get_typename(OBJECT(dev))); +#endif } /* -- 2.26.2