diff options
| author | Juan Quintela <quintela@redhat.com> | 2023-10-20 11:07:25 +0200 |
|---|---|---|
| committer | Juan Quintela <quintela@redhat.com> | 2023-11-01 16:13:58 +0100 |
| commit | 485fb95546e1cc94e77b93ff785bdbfa2c1d3ff1 (patch) | |
| tree | 1ebc4df397ac57fcabe30bce09fe71fc720aeb40 /migration/savevm.c | |
| parent | b23db4cd8218345a7ec75a8ff810896ce3a391b1 (diff) | |
| download | focaccia-qemu-485fb95546e1cc94e77b93ff785bdbfa2c1d3ff1.tar.gz focaccia-qemu-485fb95546e1cc94e77b93ff785bdbfa2c1d3ff1.zip | |
migration: Hack to maintain backwards compatibility for ppc
Current code does: - register pre_2_10_vmstate_dummy_icp with "icp/server" and instance dependinfg on cpu number - for newer machines, it register vmstate_icp with "icp/server" name and instance 0 - now it unregisters "icp/server" for the 1st instance. This is wrong at many levels: - we shouldn't have two VMSTATEDescriptions with the same name - In case this is the only solution that we can came with, it needs to be: * register pre_2_10_vmstate_dummy_icp * unregister pre_2_10_vmstate_dummy_icp * register real vmstate_icp Created vmstate_replace_hack_for_ppc() with warnings left and right that it is a hack. CC: Cedric Le Goater <clg@kaod.org> CC: Daniel Henrique Barboza <danielhb413@gmail.com> CC: David Gibson <david@gibson.dropbear.id.au> CC: Greg Kurz <groug@kaod.org> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231020090731.28701-8-quintela@redhat.com>
Diffstat (limited to 'migration/savevm.c')
| -rw-r--r-- | migration/savevm.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/migration/savevm.c b/migration/savevm.c index c7835e9c73..c7596c3e9b 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -846,6 +846,24 @@ static void vmstate_check(const VMStateDescription *vmsd) } } +/* + * See comment in hw/intc/xics.c:icp_realize() + * + * This function can be removed when + * pre_2_10_vmstate_register_dummy_icp() is removed. + */ +int vmstate_replace_hack_for_ppc(VMStateIf *obj, int instance_id, + const VMStateDescription *vmsd, + void *opaque) +{ + SaveStateEntry *se = find_se(vmsd->name, instance_id); + + if (se) { + savevm_state_handler_remove(se); + } + return vmstate_register(obj, instance_id, vmsd, opaque); +} + int vmstate_register_with_alias_id(VMStateIf *obj, uint32_t instance_id, const VMStateDescription *vmsd, void *opaque, int alias_id, |