Add ucr2 from imx_serial to vmstate, and increment the version_id.
Migrating on sabrelite can reproduce this issue:
1. Prepare the U-Boot required for sabrelite. (according to sabrelite.rst)
2. Compile qemu
$ mkdir build && cd build && ../configure --target-list="arm-softmmu" &&
make -j4
3. Start sabrelite and prepare for migration
$ ./build/qemu-system-arm -M sabrelite \
-smp 1 -m 1G -display none -serial null -serial mon:stdio \
-kernel ~/u-boot
4. Enter qemu monitor after uboot. (ctrl + a + c)
(qemu) stop
(qemu) xp /4wx 0x021e8084
021e8084: 0x00004027 0x00000784 0x00008000 0x00000a01
(qemu) migrate -d file:vmstate
(qemu) q
Load the migrated vmstate, before repairing:
$ ./build/qemu-system-arm -M sabrelite \
-smp 1 -m 1G -display none -serial null -serial mon:stdio \
-kernel ~/u-boot -incoming file:vmstate
(ctrl + a + c)
QEMU 11.0.50 monitor - type 'help' for more information
(qemu) xp /4wx 0x021e8084
021e8084: 0x00000004 0x00000784 0x00008000 0x00000a01
(qemu) q
It can be found that the data for address 0x021e8084 (register of usr2 in
imx_serial of sabrelite)
is not the data before the migration.
After being repaired:
$ ./build/qemu-system-arm -M sabrelite \
-smp 1 -m 1G -display none -serial null -serial mon:stdio \
-kernel ~/u-boot -incoming file:vmstate
(ctrl + a + c)
QEMU 11.0.50 monitor - type 'help' for more information
(qemu) xp /4wx 0x021e8084
021e8084: 0x00004027 0x00000784 0x00008000 0x00000a01
Signed-off-by: Tao Ding <[email protected]>
---
hw/char/imx_serial.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
index 080b7f6331..fb41ee2ac5 100644
--- a/hw/char/imx_serial.c
+++ b/hw/char/imx_serial.c
@@ -43,14 +43,15 @@
static const VMStateDescription vmstate_imx_serial = {
.name = TYPE_IMX_SERIAL,
- .version_id = 3,
- .minimum_version_id = 3,
+ .version_id = 4,
+ .minimum_version_id = 4,
.fields = (const VMStateField[]) {
VMSTATE_FIFO32(rx_fifo, IMXSerialState),
VMSTATE_TIMER(ageing_timer, IMXSerialState),
VMSTATE_UINT32(usr1, IMXSerialState),
VMSTATE_UINT32(usr2, IMXSerialState),
VMSTATE_UINT32(ucr1, IMXSerialState),
+ VMSTATE_UINT32(ucr2, IMXSerialState),
VMSTATE_UINT32(uts1, IMXSerialState),
VMSTATE_UINT32(onems, IMXSerialState),
VMSTATE_UINT32(ufcr, IMXSerialState),
--
2.43.0