[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Smoke test failure on Arm (was Re: [PATCH v4 0/8] xen/arm: Emulate ID registers)
On Tue, 5 Jan 2021, André Przywara wrote: > On 05/01/2021 16:06, Julien Grall wrote: > > (+ Ian and Andre) > > > > Hi Bertrand, > > > > On IRC, Ian pointed out that the smoke test was failing on Cubietruck. > > The only patches because the last success and the failure are your series. > > > > This seems to be a very early failure as there is no output from Xen [1]. > > > > I originally thought the problem was because some of the ID registers > > (such as ID_PFR2) introduced in patch #2 doesn't exist in Armv7. > > > > But per B7.2.1 in ARM DDI 0406C.d, unallocated ID registers should be > > RAZ. So it would result to a crash. Andre confirmed that PFR2 can be > > accessed by writing a small baremetal code and booted on Cortex-A7 and > > Cortex-A20. > > > > So I am not entirely sure what's the problem. Andre kindly accepted to > > try to boot Xen on his board. Hopefully, this will give us a clue on the > > problem. > > > > If not, I will borrow a Cubietruck in OssTest and see if I can reproduce > > it and debug it. > > > So I just compiled master and staging and ran just that on an Allwinner > H3 (Cortex-A7 r0p5). Master boots fine (till it complains about the > missing Dom0, as expected). However staging indeed fails: > > (XEN) Xen version 4.15-unstable (andprz01@xxxxxxxxxxxx) > (arm-slackware-linux-gnueabihf-gcc (GCC) 8.2.0) debug=y Tue Jan 5 > 16:09:40 GMT 2021 > (XEN) Latest ChangeSet: Sun Nov 8 15:59:42 2020 +0100 git:c992efd06a > (XEN) build-id: 85d361b8565b90d4e0defe2beb2419e191fd76b4 > (XEN) CPU0: Unexpected Trap: Undefined Instruction > (XEN) ----[ Xen-4.15-unstable arm32 debug=y Not tainted ]---- > (XEN) CPU: 0 > (XEN) PC: 0026b8c8 identify_cpu+0xc0/0xd4 > (XEN) CPSR: 600001da MODE:Hypervisor > (XEN) R0: 002acb20 R1: 00000000 R2: 00000000 R3: 11111111 > (XEN) R4: 002acb1c R5: 002acb20 R6: 4e000000 R7: 00000000 > (XEN) R8: 00000002 R9: 002d8200 R10:00008000 R11:002f7e6c R12:00000080 > (XEN) HYP: SP: 002f7e68 LR: 002c419c > (XEN) > (XEN) VTCR_EL2: 80002646 > (XEN) VTTBR_EL2: 00000018e628bb80 > (XEN) > (XEN) SCTLR_EL2: 30cd187f > (XEN) HCR_EL2: 00000038 > (XEN) TTBR0_EL2: 000000004013a000 > (XEN) > (XEN) ESR_EL2: 00000000 > (XEN) HPFAR_EL2: 0003fff0 > (XEN) HDFAR: 9d110000 > (XEN) HIFAR: 0000a04a > (XEN) > (XEN) Xen stack trace from sp=002f7e68: > (XEN) 00000000 002f7f54 00008000 00000000 00002000 002a4584 00000000 > 00000000 > (XEN) 00000000 00008000 49ff5000 002d81f0 40000000 00000000 00002000 > 00000001 > (XEN) 00000000 50000000 49ffd000 00000000 50000000 00000000 00000000 > 50000000 > (XEN) 4c000000 00000000 4e000000 00000000 ffffffff ffffffff 50000000 > 00000000 > (XEN) 50000000 00000000 50000000 00000000 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000003 00000000 00000000 ffffffff 00000040 ffffffff > 00000000 > (XEN) 00000000 00000000 00000000 002a7000 40008050 0000001a 00000000 > 49ff5000 > (XEN) 40008000 3fe08000 00000004 0020006c 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 00000000 > (XEN) 00000000 00000000 00000000 00000000 00000000 00000000 > (XEN) Xen call trace: > (XEN) [<0026b8c8>] identify_cpu+0xc0/0xd4 (PC) > (XEN) [<002c419c>] start_xen+0x778/0xe50 (LR) > (XEN) [<002f7f54>] 002f7f54 > (XEN) > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 0: > (XEN) CPU0: Unexpected Trap: Undefined Instruction > (XEN) **************************************** > (XEN) > (XEN) Reboot in five seconds... > > > The code in question: > 26b8c0: eef63a10 vmrs r3, mvfr1 > 26b8c4: e5803058 str r3, [r0, #88] ; 0x58 > > 26b8c8: eef53a10 vmrs r3, mvfr2 > 26b8cc: e580305c str r3, [r0, #92] ; 0x5c > 26b8d0: e28bd000 add sp, fp, #0 > 26b8d4: e49db004 pop {fp} ; (ldr fp, [sp], #4) > 26b8d8: e12fff1e bx lr > > And indeed MVFR2 is not mentioned in the ARMv7 ARM, and in contrast to > the CP15 CPUID registers this is using the VMRS instruction, so it's not > protected by future-proof CPUID register scheme. > > Not sure what to do about this, maybe #ifdef'ing this register access > with arm64? > I guess this comes from the slightly too optimistic code-sharing between > arm32 and arm64? Yes and #ifdef'ing is what we have been doing with the other registers. It looks OK in cpufeature.c; it looks ugly in cpufeature.h but I couldn't come up with something nicer at the moment. diff --git a/xen/arch/arm/cpufeature.c b/xen/arch/arm/cpufeature.c index 1f6a85aafe..9e3377eae3 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); +#ifdef CONFIG_ARM_64 c->mvfr.bits[2] = READ_SYSREG(MVFR2_EL1); +#endif } /* diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h index 6058744c18..29a63a91c8 100644 --- a/xen/include/asm-arm/cpufeature.h +++ b/xen/include/asm-arm/cpufeature.h @@ -271,9 +271,15 @@ struct cpuinfo_arm { uint32_t bits[7]; } isa32; +#ifdef CONFIG_ARM_64 struct { register_t bits[3]; } mvfr; +#else + struct { + register_t bits[2]; + } mvfr; +#endif }; extern struct cpuinfo_arm boot_cpu_data;
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |