|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/arm32: setup: Move out the code to populate the boot allocator
commit 38ed4a4876383d8acd4365dafb6454feba01a4e5
Author: Julien Grall <jgrall@xxxxxxxxxx>
AuthorDate: Sat Jun 11 12:24:49 2022 +0100
Commit: Julien Grall <julien@xxxxxxx>
CommitDate: Sat Jun 11 12:29:06 2022 +0100
xen/arm32: setup: Move out the code to populate the boot allocator
In a follow-up patch, we will want to populate the boot allocator
separately for arm64. The code will end up to be very similar to the one
on arm32. So move out the code in a new helper populate_boot_allocator().
For now the code is still protected by CONFIG_ARM_32 to avoid any build
failure on arm64.
Take the opportunity to replace mfn_add(xen_mfn_start, xenheap_pages) with
xenheap_mfn_end as they are equivalent.
Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
---
xen/arch/arm/setup.c | 90 +++++++++++++++++++++++++++++-----------------------
1 file changed, 51 insertions(+), 39 deletions(-)
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 65fdaa0900..5ab257f916 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -646,10 +646,58 @@ static void __init init_staticmem_pages(void)
}
#ifdef CONFIG_ARM_32
+/*
+ * Populate the boot allocator. All the RAM but the following regions
+ * will be added:
+ * - Modules (e.g., Xen, Kernel)
+ * - Reserved regions
+ * - Xenheap
+ */
+static void __init populate_boot_allocator(void)
+{
+ unsigned int i;
+ const struct meminfo *banks = &bootinfo.mem;
+
+ for ( i = 0; i < banks->nr_banks; i++ )
+ {
+ const struct membank *bank = &banks->bank[i];
+ paddr_t bank_end = bank->start + bank->size;
+ paddr_t s, e;
+
+ s = bank->start;
+ while ( s < bank_end )
+ {
+ paddr_t n = bank_end;
+
+ e = next_module(s, &n);
+
+ if ( e == ~(paddr_t)0 )
+ e = n = bank_end;
+
+ /*
+ * Module in a RAM bank other than the one which we are
+ * not dealing with here.
+ */
+ if ( e > bank_end )
+ e = bank_end;
+
+ /* Avoid the xenheap */
+ if ( s < mfn_to_maddr(xenheap_mfn_end) &&
+ mfn_to_maddr(xenheap_mfn_start) < e )
+ {
+ e = mfn_to_maddr(xenheap_mfn_start);
+ n = mfn_to_maddr(xenheap_mfn_end);
+ }
+
+ fw_unreserved_regions(s, e, init_boot_pages, 0);
+ s = n;
+ }
+ }
+}
+
static void __init setup_mm(void)
{
- paddr_t ram_start, ram_end, ram_size;
- paddr_t s, e;
+ paddr_t ram_start, ram_end, ram_size, e;
unsigned long ram_pages;
unsigned long heap_pages, xenheap_pages, domheap_pages;
unsigned int i;
@@ -727,43 +775,7 @@ static void __init setup_mm(void)
setup_xenheap_mappings((e >> PAGE_SHIFT) - xenheap_pages, xenheap_pages);
/* Add non-xenheap memory */
- for ( i = 0; i < bootinfo.mem.nr_banks; i++ )
- {
- paddr_t bank_start = bootinfo.mem.bank[i].start;
- paddr_t bank_end = bank_start + bootinfo.mem.bank[i].size;
-
- s = bank_start;
- while ( s < bank_end )
- {
- paddr_t n = bank_end;
-
- e = next_module(s, &n);
-
- if ( e == ~(paddr_t)0 )
- {
- e = n = ram_end;
- }
-
- /*
- * Module in a RAM bank other than the one which we are
- * not dealing with here.
- */
- if ( e > bank_end )
- e = bank_end;
-
- /* Avoid the xenheap */
- if ( s < mfn_to_maddr(mfn_add(xenheap_mfn_start, xenheap_pages))
- && mfn_to_maddr(xenheap_mfn_start) < e )
- {
- e = mfn_to_maddr(xenheap_mfn_start);
- n = mfn_to_maddr(mfn_add(xenheap_mfn_start, xenheap_pages));
- }
-
- fw_unreserved_regions(s, e, init_boot_pages, 0);
-
- s = n;
- }
- }
+ populate_boot_allocator();
/* Frame table covers all of RAM region, including holes */
setup_frametable_mappings(ram_start, ram_end);
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |