[Crash-utility] [PATCH] ppc64: increase MAX_PHYSMEM_BITS to 2PB

Hari Bathini hbathini at linux.ibm.com
Tue Dec 4 10:29:34 UTC 2018


With kernel commit 4ffe713b7587 ("powerpc/mm: Increase the max addressable
memory to 2PB"), MAX_PHYSMEM_BITS is bumped up to 51 for SPARSEMEM_VMEMMAP
and SPARSEMEM_EXTREME case. Make the appropriate update here.

Signed-off-by: Hari Bathini <hbathini at linux.ibm.com>
---
 defs.h  |    1 +
 ppc64.c |   33 ++++++++++++++++++++++++++-------
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/defs.h b/defs.h
index b66ccad..9ce32c1 100644
--- a/defs.h
+++ b/defs.h
@@ -4093,6 +4093,7 @@ struct efi_memory_desc_t {
 #define _MAX_PHYSMEM_BITS	44
 #define _MAX_PHYSMEM_BITS_3_7   46
 #define _MAX_PHYSMEM_BITS_4_19  47
+#define _MAX_PHYSMEM_BITS_4_20  51
 
 #endif /* PPC64 */
 
diff --git a/ppc64.c b/ppc64.c
index 041480b..485fa9d 100644
--- a/ppc64.c
+++ b/ppc64.c
@@ -220,6 +220,31 @@ static int ppc64_is_vmaddr(ulong addr)
 	return (vt->vmalloc_start && addr >= vt->vmalloc_start);
 }
 
+static int set_ppc64_max_physmem_bits(void)
+{
+	int dimension;
+
+	get_array_length("mem_section", &dimension, 0);
+
+	if ((machdep->flags & VMEMMAP) &&
+	    (THIS_KERNEL_VERSION >= LINUX(4,20,0)) &&
+	    !dimension && (machdep->pagesize == 65536)) {
+		/*
+		 * SPARSEMEM_VMEMMAP & SPARSEMEM_EXTREME configurations with
+		 * 64K pagesize and v4.20 kernel or later.
+		 */
+		machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_4_20;
+	} else if ((machdep->flags & VMEMMAP) &&
+		   (THIS_KERNEL_VERSION >= LINUX(4,19,0))) {
+		/* SPARSEMEM_VMEMMAP & v4.19 kernel or later */
+		machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_4_19;
+	} else if (THIS_KERNEL_VERSION >= LINUX(3,7,0))
+		machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7;
+	else
+		machdep->max_physmem_bits = _MAX_PHYSMEM_BITS;
+
+	return 0;
+}
 
 struct machine_specific ppc64_machine_specific = { 
 	.hwintrstack = { 0 }, 
@@ -583,13 +608,7 @@ ppc64_init(int when)
 			ppc64_vmemmap_init();
 
 		machdep->section_size_bits = _SECTION_SIZE_BITS;
-		if ((machdep->flags & VMEMMAP) &&
-		    (THIS_KERNEL_VERSION >= LINUX(4,19,0)))
-			machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_4_19;
-		else if (THIS_KERNEL_VERSION >= LINUX(3,7,0))
-			machdep->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7;
-		else
-			machdep->max_physmem_bits = _MAX_PHYSMEM_BITS;
+		set_ppc64_max_physmem_bits();
 
 		ppc64_init_cpu_info();
 		machdep->vmalloc_start = ppc64_vmalloc_start;




More information about the Crash-utility mailing list