>>>> +static const VMStateDescription vmstate_spapr_xive = { >>>> + .name = TYPE_SPAPR_XIVE, >>>> + .version_id = 1, >>>> + .minimum_version_id = 1, >>>> + .needed = vmstate_spapr_xive_needed, >>>> + .fields = (VMStateField[]) { >>>> + VMSTATE_UINT32_EQUAL(nr_irqs, sPAPRXive, NULL), >>>> + VMSTATE_STRUCT_VARRAY_UINT32_ALLOC(ivt, sPAPRXive, nr_irqs, 1, >>>> + vmstate_spapr_xive_ive, >>>> XiveIVE), >>> >>> Hmm... this array is allocated at realize and this will cause >>> the migration code to re-allocate it again with the same size, >>> and leak memory IIUC. >> >> I thought so but something was going wrong on the receive side (memory >> corruption detected by valgrind). I did not find why yet. >> > > Have you tried VMSTATE_STRUCT_VARRAY_POINTER_UINT32() ?
yes. tcg/intel only though. C.