From: Julien Grall Date: Thu, 3 Mar 2022 20:14:53 +0000 (+0000) Subject: xen/arm: mm: Encode existing constraints of the memory layout X-Git-Tag: archive/raspbian/4.17.0-1+rpi1^2~33^2~867 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1f410b0c7455748021be4ede59e7a0c0a2ffb1c4;p=xen.git xen/arm: mm: Encode existing constraints of the memory layout The boot code expects the regions XEN_VIRT_START, FIXMAP_ADDR(0), BOOT_FDT_VIRT_START to use the same 0th (arm64 only) and 1st slot. Add some BUILD_BUG_ON() to confirm that. This is helpful if one wants to re-order the memory layout. Signed-off-by: Julien Grall Reviewed-by: Bertrand Marquis --- diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c index 8a17222109..7b1f2f4906 100644 --- a/xen/arch/arm/mm.c +++ b/xen/arch/arm/mm.c @@ -211,6 +211,22 @@ static void __init __maybe_unused build_assertions(void) #ifdef CONFIG_DOMAIN_PAGE BUILD_BUG_ON(DOMHEAP_VIRT_START & ~FIRST_MASK); #endif + /* + * The boot code expects the regions XEN_VIRT_START, FIXMAP_ADDR(0), + * BOOT_FDT_VIRT_START to use the same 0th (arm64 only) and 1st + * slot in the page tables. + */ +#define CHECK_SAME_SLOT(level, virt1, virt2) \ + BUILD_BUG_ON(level##_table_offset(virt1) != level##_table_offset(virt2)) + +#ifdef CONFIG_ARM_64 + CHECK_SAME_SLOT(zeroeth, XEN_VIRT_START, FIXMAP_ADDR(0)); + CHECK_SAME_SLOT(zeroeth, XEN_VIRT_START, BOOT_FDT_VIRT_START); +#endif + CHECK_SAME_SLOT(first, XEN_VIRT_START, FIXMAP_ADDR(0)); + CHECK_SAME_SLOT(first, XEN_VIRT_START, BOOT_FDT_VIRT_START); + +#undef CHECK_SAME_SLOT } void dump_pt_walk(paddr_t ttbr, paddr_t addr,