[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] xen/arm/efi: merge neighboring banks



commit fb9a7f6cf34a5051a99aad58511aaf41bcddb710
Author:     Stefano Stabellini <stefano.stabellini@xxxxxxx>
AuthorDate: Fri Mar 28 14:33:31 2025 -0700
Commit:     Michal Orzel <michal.orzel@xxxxxxx>
CommitDate: Mon Mar 31 10:31:12 2025 +0200

    xen/arm/efi: merge neighboring banks
    
    When booting from U-Boot bootefi, there can be a high number of
    neighboring RAM banks. See for example:
    
    (XEN) RAM: 0000000000000000 - 0000000000bfffff
    (XEN) RAM: 0000000000c00000 - 0000000000c00fff
    (XEN) RAM: 0000000000c01000 - 0000000000dfffff
    (XEN) RAM: 0000000000e00000 - 000000000279dfff
    (XEN) RAM: 000000000279e000 - 00000000029fffff
    (XEN) RAM: 0000000002a00000 - 0000000008379fff
    (XEN) RAM: 000000000837a000 - 00000000083fffff
    (XEN) RAM: 0000000008400000 - 0000000008518fff
    (XEN) RAM: 0000000008519000 - 00000000085fffff
    (XEN) RAM: 0000000008600000 - 0000000008613fff
    (XEN) RAM: 0000000008614000 - 00000000097fffff
    (XEN) RAM: 0000000009800000 - 00000000098a7fff
    (XEN) RAM: 00000000098a8000 - 0000000009dfffff
    (XEN) RAM: 0000000009e00000 - 0000000009ea7fff
    (XEN) RAM: 0000000009ea8000 - 000000001fffffff
    (XEN) RAM: 0000000020000000 - 000000002007ffff
    (XEN) RAM: 0000000020080000 - 0000000077b17fff
    (XEN) RAM: 0000000077b19000 - 0000000077b2bfff
    (XEN) RAM: 0000000077b2c000 - 0000000077c8dfff
    (XEN) RAM: 0000000077c8e000 - 0000000077c91fff
    (XEN) RAM: 0000000077ca7000 - 0000000077caafff
    (XEN) RAM: 0000000077cac000 - 0000000077caefff
    (XEN) RAM: 0000000077cd0000 - 0000000077cd2fff
    (XEN) RAM: 0000000077cd4000 - 0000000077cd7fff
    (XEN) RAM: 0000000077cd8000 - 000000007bd07fff
    (XEN) RAM: 000000007bd09000 - 000000007fd5ffff
    (XEN) RAM: 000000007fd70000 - 000000007fefffff
    (XEN) RAM: 0000000800000000 - 000000087fffffff
    
    Xen does not currently support boot modules that span multiple banks: at
    least one of the regions get freed twice. The first time from
    setup_mm->populate_boot_allocator, then again from
    discard_initial_modules->fw_unreserved_regions. With a high number of
    banks, it can be difficult to arrange the boot modules in a way that
    avoids spanning across multiple banks.
    
    This small patch merges neighboring regions, to make dealing with them
    more efficient, and to make it easier to load boot modules.
    
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxx>
    Acked-by: Julien Grall <jgrall@xxxxxxxxxx>
---
 xen/arch/arm/efi/efi-boot.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/xen/arch/arm/efi/efi-boot.h b/xen/arch/arm/efi/efi-boot.h
index a80a5a7ab3..dcad46ca72 100644
--- a/xen/arch/arm/efi/efi-boot.h
+++ b/xen/arch/arm/efi/efi-boot.h
@@ -163,6 +163,7 @@ static bool __init meminfo_add_bank(struct membanks *mem,
     struct membank *bank;
     paddr_t start = desc->PhysicalStart;
     paddr_t size = desc->NumberOfPages * EFI_PAGE_SIZE;
+    unsigned int j;
 
     if ( mem->nr_banks >= mem->max_banks )
         return false;
@@ -171,6 +172,15 @@ static bool __init meminfo_add_bank(struct membanks *mem,
         return false;
 #endif
 
+    for ( j = 0; j < mem->nr_banks; j++ )
+    {
+        if ( (mem->bank[j].start + mem->bank[j].size) == start )
+        {
+            mem->bank[j].size += size;
+            return true;
+        }
+    }
+
     bank = &mem->bank[mem->nr_banks];
     bank->start = start;
     bank->size = size;
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.