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

[xen master] xen/arm: Enlarge identity map space to 10TB



commit 6cd046c501bce48cdc42f597fc7a023aa08853e7
Author:     Leo Yan <leo.yan@xxxxxxxxxx>
AuthorDate: Fri Oct 13 20:26:58 2023 +0800
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Thu Nov 16 14:17:22 2023 +0000

    xen/arm: Enlarge identity map space to 10TB
    
    On ADLink AVA platform (Ampere Altra SoC with 32 Arm Neoverse N1 cores),
    the physical memory regions are:
    
      DRAM memory regions:
        Node[0] Region[0]: 0x000080000000 - 0x0000ffffffff
        Node[0] Region[1]: 0x080000000000 - 0x08007fffffff
        Node[0] Region[2]: 0x080100000000 - 0x0807ffffffff
    
    The UEFI loads Xen hypervisor and DTB into the high memory, the kernel
    and ramdisk images are loaded into the low memory space:
    
      (XEN) MODULE[0]: 00000807f6df0000 - 00000807f6f3e000 Xen
      (XEN) MODULE[1]: 00000807f8054000 - 00000807f8056000 Device Tree
      (XEN) MODULE[2]: 00000000fa834000 - 00000000fc5de1d5 Ramdisk
      (XEN) MODULE[3]: 00000000fc5df000 - 00000000ffb3f810 Kernel
    
    In this case, the Xen binary is loaded above 8TB, which exceeds the
    maximum supported identity map space of 2TB in Xen. Consequently, the
    system fails to boot.
    
    This patch enlarges identity map space to 10TB, allowing module loading
    within the range of [0x0 .. 0x000009ff_ffff_ffff].
    
    Fixes: 1c78d76b67 ("xen/arm64: mm: Introduce helpers to 
prepare/enable/disable")
    Reported-by: Alexey Klimov <alexey.klimov@xxxxxxxxxx>
    Signed-off-by: Leo Yan <leo.yan@xxxxxxxxxx>
    Tested-by: Henry Wang <Henry.Wang@xxxxxxx>
    Release-acked-by: Henry Wang <Henry.Wang@xxxxxxx>
    Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
    Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
---
 xen/arch/arm/arm64/mm.c               | 6 ++++--
 xen/arch/arm/include/asm/mmu/layout.h | 8 ++++----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/xen/arch/arm/arm64/mm.c b/xen/arch/arm/arm64/mm.c
index 78b7c7eb00..cb69df0661 100644
--- a/xen/arch/arm/arm64/mm.c
+++ b/xen/arch/arm/arm64/mm.c
@@ -41,7 +41,8 @@ static void __init prepare_boot_identity_mapping(void)
     clear_page(boot_third_id);
 
     if ( id_offsets[0] >= IDENTITY_MAPPING_AREA_NR_L0 )
-        panic("Cannot handle ID mapping above 2TB\n");
+        panic("Cannot handle ID mapping above %uTB\n",
+              IDENTITY_MAPPING_AREA_NR_L0 >> 1);
 
     /* Link first ID table */
     pte = mfn_to_xen_entry(virt_to_mfn(boot_first_id), MT_NORMAL);
@@ -74,7 +75,8 @@ static void __init prepare_runtime_identity_mapping(void)
     DECLARE_OFFSETS(id_offsets, id_addr);
 
     if ( id_offsets[0] >= IDENTITY_MAPPING_AREA_NR_L0 )
-        panic("Cannot handle ID mapping above 2TB\n");
+        panic("Cannot handle ID mapping above %uTB\n",
+              IDENTITY_MAPPING_AREA_NR_L0 >> 1);
 
     /* Link first ID table */
     pte = pte_of_xenaddr((vaddr_t)xen_first_id);
diff --git a/xen/arch/arm/include/asm/mmu/layout.h 
b/xen/arch/arm/include/asm/mmu/layout.h
index 2cb2382fbf..eac7eef885 100644
--- a/xen/arch/arm/include/asm/mmu/layout.h
+++ b/xen/arch/arm/include/asm/mmu/layout.h
@@ -19,11 +19,11 @@
  *   2G -   4G   Domheap: on-demand-mapped
  *
  * ARM64 layout:
- * 0x0000000000000000 - 0x000001ffffffffff (2TB, L0 slots [0..3])
+ * 0x0000000000000000 - 0x000009ffffffffff (10TB, L0 slots [0..19])
  *
  *  Reserved to identity map Xen
  *
- * 0x0000020000000000 - 0x0000027fffffffff (512GB, L0 slot [4])
+ * 0x00000a0000000000 - 0x00000a7fffffffff (512GB, L0 slot [20])
  *  (Relative offsets)
  *   0  -   2M   Unmapped
  *   2M -  10M   Xen text, data, bss
@@ -35,7 +35,7 @@
  *
  *  32G -  64G   Frametable: 56 bytes per page for 2TB of RAM
  *
- * 0x0000028000000000 - 0x00007fffffffffff (125TB, L0 slots [5..255])
+ * 0x00000a8000000000 - 0x00007fffffffffff (512GB+117TB, L0 slots [21..255])
  *  Unused
  *
  * 0x0000800000000000 - 0x000084ffffffffff (5TB, L0 slots [256..265])
@@ -49,7 +49,7 @@
 #define XEN_VIRT_START          _AT(vaddr_t, MB(2))
 #else
 
-#define IDENTITY_MAPPING_AREA_NR_L0     4
+#define IDENTITY_MAPPING_AREA_NR_L0     20
 #define XEN_VM_MAPPING                  SLOT0(IDENTITY_MAPPING_AREA_NR_L0)
 
 #define SLOT0_ENTRY_BITS  39
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

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