static const VMStateDescription vmstate_aspeed_smc = {
      .name = "aspeed.smc",
-    .version_id = 2,
+    .version_id = 3,
      .minimum_version_id = 2,
      .fields = (const VMStateField[]) {
          VMSTATE_UINT32_ARRAY(regs, AspeedSMCState, ASPEED_SMC_R_MAX),
          VMSTATE_UINT8(snoop_index, AspeedSMCState),
          VMSTATE_UINT8(snoop_dummies, AspeedSMCState),
+        VMSTATE_BOOL(unselect, AspeedSMCState),
          VMSTATE_END_OF_LIST()
      }
  };

I think this will break migration compatibility. In order to enable
at least forward migration, it should be:

     VMSTATE_BOOL_V(unselect, AspeedSMCState, 3),

This is correct. I will fix the patch.

Some background,

The aspeed machines are fully emulated and the Aspeed SoC models are not
part of any virt* machines (yet). So migration support is a bit of a
theory. We have done our best to maintain some support, compatibility
not being a priority. IOW, it's not perfectly tuned as on virt machines.

Also, on ARM, migration of the CPU secure mode (I think this is the reason,
Peter please correct me !) is not supported and if migration is initiated
after Linux has started, the machine will hang.

However, if one day, an aspeed model becomes part of a virt machine, we
should be more careful. I would start by resetting all vmstate versions
to 1!

Thanks,

C.




For allowing backwards migration, too, we should consider making it a
subsection instead that allows migration in the default case of an idle
device.

Kevin



Reply via email to