Re: [PATCH 1/1] hw/char: imx_serial: add missing migration state
Michael Tokarev <[email protected]>
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
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),