[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] 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#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |