Message ID | 20170420151228.19158-1-julien.grall@arm.com |
---|---|
Headers | show |
Series | xen/arm: Properly map the FDT in the boot page table | expand |
I committed this series, thank you. On Thu, 20 Apr 2017, Julien Grall wrote: > Hi, > > Whilst doing some testing on Juno using GRUB, I noticed random early crash > depending ([1]) on the binaries I was using. > > This is because Xen is assuming that the FDT will always fit in a 2MB > superpage whilst the boot documentation allow the FDT to cross a 2MB boundary. > > The first patch move the code that map the FDT in the boot page table from > assembly to C making easier to modify the code. > > This series is candidate for Xen 4.9. Whilst this early boot rework sounds > scary, a user can see random early crash without this series. I chose > to move all the FDT mapping code in C right now because it is less error-prone > to write C code than assembly. > > I have tested both ARM32 and ARM64 with different position of the FDT without > noticing any issue. > > For all the changes see in each patches. > > Cheers, > > [1] > > (XEN) Hypervisor Trap. HSR=0x96000006 EC=0x25 IL=1 Syndrome=0x6 > (XEN) CPU0: Unexpected Trap: Hypervisor > (XEN) ----[ Xen-4.9-unstable arm64 debug=y Not tainted ]---- > (XEN) CPU: 0 > (XEN) PC: 0000000000264140 strlen+0x10/0x84 > (XEN) LR: 00000000002401c0 > (XEN) SP: 00000000002cfc20 > (XEN) CPSR: 400003c9 MODE:64-bit EL2h (Hypervisor, handler) > (XEN) X0: 0000000000801230 X1: 0000000000801230 X2: 0000000000005230 > (XEN) X3: 0000000000000030 X4: 0000000000000030 X5: 0000000000000038 > (XEN) X6: 0000000000000034 X7: 0000000000000000 X8: 7f7f7f7f7f7f7f7f > (XEN) X9: 64622c6479687222 X10: 7f7f7f7f7f7f7f7f X11: 0101010101010101 > (XEN) X12: 0000000000000030 X13: ffffff00ff000000 X14: 0800000003000000 > (XEN) X15: ffffffffffffffff X16: 00000000fefff610 X17: 00000000000000f0 > (XEN) X18: 0000000000000004 X19: 0000000000000008 X20: 00000000007fc040 > (XEN) X21: 00000000007fc000 X22: 000000000000000e X23: 0000000000000000 > (XEN) X24: 00000000002a9f58 X25: 0000000000801230 X26: 00000000002a9f68 > (XEN) X27: 00000000002a9f58 X28: 0000000000298910 FP: 00000000002cfc20 > (XEN) > (XEN) VTCR_EL2: 80010c40 > (XEN) VTTBR_EL2: 0000082800203000 > (XEN) > (XEN) SCTLR_EL2: 30c5183d > (XEN) HCR_EL2: 000000000038663f > (XEN) TTBR0_EL2: 00000000f4912000 > (XEN) > (XEN) ESR_EL2: 96000006 > (XEN) HPFAR_EL2: 00000000e8071000 > (XEN) FAR_EL2: 0000000000801230 > (XEN) > (XEN) Xen stack trace from sp=00000000002cfc20: > (XEN) 00000000002cfc70 0000000000240254 00000000002a9f58 00000000007fc000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 00000000007fc03c > (XEN) 00000000002cfd78 0000000000000000 00000000002cfca0 00000000002986fc > (XEN) 0000000000000000 00000000007fc000 0000000000000000 0000000000000000 > (XEN) 00000000002cfcc0 0000000000298f1c 0000000000000000 00000000007fc000 > (XEN) 00000000002cfdc0 000000000029904c 00000000f47fc000 00000000f4604000 > (XEN) 00000000f47fc000 00000000007fc000 0000000000400000 0000000000000100 > (XEN) 00000000f4604000 0000000000000001 0000000000000001 8000000000000002 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 00000000002cfdc0 0000000000299038 > (XEN) 00000000f47fc000 00000000f4604000 00000000f47fc000 0000000000000000 > (XEN) 00000000002cfe20 000000000029c420 00000000002d8000 00000000f4604000 > (XEN) 00000000f47fc000 0000000000000000 0000000000400000 0000000000000100 > (XEN) 00000000f4604000 0000000000000001 00000000f47fc000 000000000029c404 > (XEN) 00000000fefff510 0000000000200624 00000000f4804000 00000000f4604000 > (XEN) 00000000f47fc000 0000000000000000 0000000000400000 0000000000000100 > (XEN) 0000000000000001 0000000000000001 0000000000000001 8000000000000002 > (XEN) 00000000f47fc000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) 0000000000000000 0000000000000000 0000000000000000 0000000000000000 > (XEN) Xen call trace: > (XEN) [<0000000000264140>] strlen+0x10/0x84 (PC) > (XEN) [<00000000002401c0>] fdt_get_property_namelen+0x9c/0xf0 (LR) > (XEN) [<0000000000240254>] fdt_get_property+0x40/0x50 > (XEN) [<00000000002986fc>] bootfdt.c#device_tree_get_u32+0x18/0x5c > (XEN) [<0000000000298f1c>] device_tree_for_each_node+0x84/0x144 > (XEN) [<000000000029904c>] boot_fdt_info+0x70/0x23c > (XEN) [<000000000029c420>] start_xen+0x9c/0xd30 > (XEN) [<0000000000200624>] arm64/head.o#paging+0x84/0xbc > (XEN) > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 0: > (XEN) CPU0: Unexpected Trap: Hypervisor > (XEN) > (XEN) **************************************** > > Julien Grall (5): > xen/arm: Add BOOT_FDT_VIRT_END and BOOT_FDT_SLOT_SIZE > xen/arm: mm: Move create_mappings function earlier in the file > xen/arm: Move the code to map FDT in the boot tables from assembly to > C > xen/arm: Check if the FDT passed by the bootloader is valid > xen/arm: Properly map the FDT in the boot page table > > xen/arch/arm/arm32/head.S | 14 ----- > xen/arch/arm/arm64/head.S | 13 ----- > xen/arch/arm/mm.c | 123 +++++++++++++++++++++++++++++++------------ > xen/arch/arm/setup.c | 10 ++-- > xen/include/asm-arm/config.h | 16 +++--- > xen/include/asm-arm/mm.h | 2 + > xen/include/asm-arm/setup.h | 3 ++ > 7 files changed, 110 insertions(+), 71 deletions(-) > > -- > 2.11.0 >