From: Julien Grall <jgrall@amazon.com>
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 <jgrall@amazon.com>
---
xen/arch/arm/mm.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index 8a17222109c6..40423a70f0ae 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.
+ */
+#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,
--
2.32.0
Hi Julien, > On 28 Feb 2022, at 10:06, Julien Grall <julien@xen.org> wrote: > > From: Julien Grall <jgrall@amazon.com> > > 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. Very good idea :-) > > Signed-off-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> Just a small NIT after if you want to do it on commit... > --- > xen/arch/arm/mm.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c > index 8a17222109c6..40423a70f0ae 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. NIT: I would just add at the end of the sentence “in the page tables.” Cheers Bertrand > + */ > +#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, > -- > 2.32.0 >
On 03/03/2022 16:04, Bertrand Marquis wrote: > Hi Julien, Hi Bertrand, >> On 28 Feb 2022, at 10:06, Julien Grall <julien@xen.org> wrote: >> >> From: Julien Grall <jgrall@amazon.com> >> >> 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. > > Very good idea :-) I actually hit this issue when trying to re-order the memory layout for testing a patch. > >> >> Signed-off-by: Julien Grall <jgrall@amazon.com> > > Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> > > Just a small NIT after if you want to do it on commit... I have update the comment and committed the patch. Thanks! Cheers, -- Julien Grall
© 2016 - 2024 Red Hat, Inc.