This change (now commit 06fd39e4) fixes a bug in a commit that is in the 11.0.0 release. Unfortunately I forgot to mark it as Cc: stable when committing it.
Could we cherry-pick 06fd39e4 into the 11.0.x stable branch, please? (This just got re-reported as https://gitlab.com/qemu-project/qemu/-/work_items/3565 ) thanks -- PMM On Fri, 15 May 2026 at 11:49, Peter Maydell <[email protected]> wrote: > > From: "Scott J. Goldman" <[email protected]> > > Commit ab2ddc7b66 ("target/arm/machine: Use VMSTATE_VARRAY_INT32_ALLOC > for cpreg arrays") moved cpreg_vmstate_indexes / cpreg_vmstate_values > to be allocated by VMSTATE_VARRAY_INT32_ALLOC and added an assertion > in cpu_pre_load() that they are NULL on entry. The same commit dropped > the redundant g_renew()/array_len assignments from the kvm, whpx and > helper.c cpu init paths, but the hvf cpu init path still pre-allocates > them. > > The result is that loading a snapshot or migration stream into an HVF > guest immediately aborts: > > ERROR:target/arm/machine.c:1043:cpu_pre_load: > assertion failed: (!cpu->cpreg_vmstate_indexes) > > Drop the leftover cpreg_vmstate_indexes / cpreg_vmstate_values > allocations and the cpreg_vmstate_array_len assignment from > hvf_arch_init_vcpu(), matching what was already done for the other > arm accelerators. > > Signed-off-by: Scott J. Goldman <[email protected]> > Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > Signed-off-by: Peter Maydell <[email protected]> > --- > target/arm/hvf/hvf.c | 7 ------- > 1 file changed, 7 deletions(-) > > diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c > index 5a1718f7f9..9312607001 100644 > --- a/target/arm/hvf/hvf.c > +++ b/target/arm/hvf/hvf.c > @@ -1412,12 +1412,6 @@ int hvf_arch_init_vcpu(CPUState *cpu) > sregs_match_len); > arm_cpu->cpreg_values = g_renew(uint64_t, arm_cpu->cpreg_values, > sregs_match_len); > - arm_cpu->cpreg_vmstate_indexes = g_renew(uint64_t, > - arm_cpu->cpreg_vmstate_indexes, > - sregs_match_len); > - arm_cpu->cpreg_vmstate_values = g_renew(uint64_t, > - arm_cpu->cpreg_vmstate_values, > - sregs_match_len); > > memset(arm_cpu->cpreg_values, 0, sregs_match_len * sizeof(uint64_t)); > > @@ -1462,7 +1456,6 @@ int hvf_arch_init_vcpu(CPUState *cpu) > } > } > arm_cpu->cpreg_array_len = sregs_cnt; > - arm_cpu->cpreg_vmstate_array_len = sregs_cnt; > > /* cpreg tuples must be in strictly ascending order */ > qsort(arm_cpu->cpreg_indexes, sregs_cnt, sizeof(uint64_t), compare_u64); > -- > 2.43.0
