Hello, Based on a comment from mst, this mini-series proposes to change semantics of VMStateDescription registration to be more similar to those of static properties.
Today, a device has one VMStateDescription, the last assignment to dc->vmsd wins. This means that a device must take care to include state of its parent type. To avoid dealing with individual fields, VMSTATE_STRUCT() and wrappers have been used. Such fields often require access of the deprecated QOM parent field. The proposal is that, e.g., TYPE_CPU assigns its own VMStateDescription and derived types (e.g., TYPE_ALPHA_CPU) register a VMStateDescription with name and versions to be used and only the fields specific to that type. In this v1, versions of the parents' vmsd are ignored, so someone changing CPU's DeviceClass::vmsd (as opposed to DeviceClass::vmsd->fields[0].vmsd) would need to assure appropriate .field_exists tests or bump the version of derived types' vmsd as if a field had been added there. Only rudimentarily tested: I've run some machines that didn't crash on startup. Regards, Andreas Cc: Michael S. Tsirkin <m...@redhat.com> Cc: Juan Quintela <quint...@redhat.com> Cc: Anthony Liguori <anth...@codemonkey.ws> Cc: Paolo Bonzini <pbonz...@redhat.com> Andreas Färber (2): qdev: Construct VMStateDescription from type hierarchy cpu: Move VMSTATE_CPU() into TYPE_CPU VMStateDescription hw/core/qdev.c | 102 +++++++++++++++++++++++++++++++++++++++++----- include/hw/qdev-core.h | 1 + include/qom/cpu.h | 4 -- qom/cpu.c | 10 +++++ stubs/vmstate.c | 1 + target-alpha/machine.c | 1 - target-openrisc/machine.c | 1 - 7 files changed, 103 insertions(+), 17 deletions(-) -- 1.8.1.4