On Sun, 19 Jun 2022 at 01:18, Richard Henderson <richard.hender...@linaro.org> wrote: > > In machvirt_init we create a cpu but do not fully initialize it. > Thus the propagation of V7VE to LPAE has not been done, and we > compute the wrong value for some v7 cpus, e.g. cortex-a15. > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1078 > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > target/arm/ptw.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/target/arm/ptw.c b/target/arm/ptw.c > index 07f7a21861..da478104f0 100644 > --- a/target/arm/ptw.c > +++ b/target/arm/ptw.c > @@ -47,7 +47,13 @@ unsigned int arm_pamax(ARMCPU *cpu) > assert(parange < ARRAY_SIZE(pamax_map)); > return pamax_map[parange]; > } > - if (arm_feature(&cpu->env, ARM_FEATURE_LPAE)) { > + > + /* > + * In machvirt_init, we call arm_pamax on a cpu that is not fully > + * initialized, so we can't rely on the propagation done in realize. > + */ > + if (arm_feature(&cpu->env, ARM_FEATURE_LPAE) || > + arm_feature(&cpu->env, ARM_FEATURE_V7VE)) { > /* v7 with LPAE */ > return 40;
I guess this is expedient, so on that basis Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> but as I mentioned in the gitlab issue it's kind of bogus that the virt board is doing stuff to a non-realized CPU object. thanks -- PMM