[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] xen/arm: do not read MVFR2 when is not defined
On Fri, 8 Jan 2021, Julien Grall wrote: > Hi Stefano, > > On 08/01/2021 19:22, Stefano Stabellini wrote: > > MVFR2 is not available on ARMv7. It is available on ARMv8 aarch32 and > > aarch64. If Xen reads MVFR2 on ARMv7 it could crash. > > > > Avoid the issue by doing the following: > > > > - define MVFR2_MAYBE_UNDEFINED on arm32 > > - if MVFR2_MAYBE_UNDEFINED, do not attempt to read MVFR2 in Xen > > - keep the 3rd register_t in struct cpuinfo_arm.mvfr on arm32 so that a > > guest read to the register returns '0' instead of crashing the guest. > > > > '0' is an appropriate value to return to the guest because it is defined > > as "no support for miscellaneous features". > > > > Aarch64 Xen is not affected by this patch. > > > > Fixes: 9cfdb489af81 ("xen/arm: Add ID registers and complete cpuinfo") > > Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx> > > Acked-by: Julien Grall <jgrall@xxxxxxxxxx> > > With one question below: Thanks! > > xen/arch/arm/cpufeature.c | 2 ++ > > xen/include/asm-arm/arm32/sysregs.h | 3 +++ > > 2 files changed, 5 insertions(+) > > > > diff --git a/xen/arch/arm/cpufeature.c b/xen/arch/arm/cpufeature.c > > index 1f6a85aafe..698bfa0201 100644 > > --- a/xen/arch/arm/cpufeature.c > > +++ b/xen/arch/arm/cpufeature.c > > @@ -150,7 +150,9 @@ void identify_cpu(struct cpuinfo_arm *c) > > c->mvfr.bits[0] = READ_SYSREG(MVFR0_EL1); > > c->mvfr.bits[1] = READ_SYSREG(MVFR1_EL1); > > +#ifndef MVFR2_MAYBE_UNDEFINED > > c->mvfr.bits[2] = READ_SYSREG(MVFR2_EL1); > > +#endif > > Is there any guarantee that c->mvfr.bits[2] will be zeroed by default? It is coming from one of the following: - xen/arch/arm/setup.c: struct cpuinfo_arm __read_mostly boot_cpu_data; - xen/arch/arm/smpboot.c: struct cpuinfo_arm cpu_data[NR_CPUS]; Both are global variables so they should be both zeroed.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |