On 7/15/26 16:18, Tao Ding wrote:
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]>


Somehow, this grow Cc: qemu-stable@ in the final version which was
applied as v11.1.0-rc0-68-g8833ff95eaf.  I don't think this is a
good candidate for the stable series, since this fix changes the
migration stream format, which is very difficult to do in the stable
series.

FWIW.

Thanks,

/mjt

  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),


Reply via email to