On 11/9/23 11:28, Philippe Mathieu-Daudé wrote:
@@ -436,6 +438,24 @@ static const VMStateDescription vmstate_pl011_clock = { } };+static bool pl011_xmit_fifo_state_needed(void *opaque)+{ + PL011State* s = opaque; + + return !fifo8_is_empty(&s->xmit_fifo); +} + +static const VMStateDescription vmstate_pl011_xmit_fifo = { + .name = "pl011/xmit_fifo", + .version_id = 1, + .minimum_version_id = 1, + .needed = pl011_xmit_fifo_state_needed, + .fields = (VMStateField[]) { + VMSTATE_FIFO8(xmit_fifo, PL011State), + VMSTATE_END_OF_LIST() + } +}; + static int pl011_post_load(void *opaque, int version_id) { PL011State* s = opaque; @@ -487,7 +507,11 @@ static const VMStateDescription vmstate_pl011 = { .subsections = (const VMStateDescription * []) { &vmstate_pl011_clock, NULL - } + }, + .subsections = (const VMStateDescription * []) { + &vmstate_pl011_xmit_fifo, + NULL + }, };
It just occurred to me that you may need a vmstate_pl011 pre_load() to empty the FIFO, which will then be filled if and only if the saved vmstate_pl011_xmit_fifo subsection is present.
Juan, have I got this correct about how migration would or should handle a missing subsection? r~
