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~

Reply via email to