From 9045b72bdb703bf58a6586d77461eea8f59f50f7 Mon Sep 17 00:00:00 2001 From: Alexandru Moise Date: Fri, 29 Apr 2016 07:40:46 +0000 Subject: [PATCH] mem_section: Support only 46 bit for MAX_PHYSMEM_BITS on PPC64 Related to change: http://lists.infradead.org/pipermail/kexec/2013-January/007849.html Linux on PPC64 has supported only 46 bit MAX_PHYSMEM_BITS since commit: 048ee0993ec8360abb0b51bdf8f8721e9ed62ec4 Also remove set_ppc64_max_physmem_bits and set info->max_physmem_bits in get_machdep_info_ppc64 instead. set_ppc64_max_physmem_bits is broken for all kernels compiled with CONFIG_SPARSEMEM=n. makedumpfile is unable to get mem_section field from powerpc kernel since commit: fd59d231f81cb02870b9cf15f456a897f3669b4e Upstream-Status: Pending Signed-off-by: Alexandru Moise Signed-off-by: Yi Zhao [hqBai: adjusted patch for context, no logical change] Signed-off-by: Haiqing Bai Signed-off-by: Mingli Yu --- arch/ppc64.c | 38 ++------------------------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/arch/ppc64.c b/arch/ppc64.c index 9d8f252..6f4860f 100644 --- a/arch/ppc64.c +++ b/arch/ppc64.c @@ -462,48 +462,14 @@ ppc64_vtop_level4(unsigned long vaddr) return paddr; } -int -set_ppc64_max_physmem_bits(void) -{ - long array_len = ARRAY_LENGTH(mem_section); - /* - * The older ppc64 kernels uses _MAX_PHYSMEM_BITS as 42 and the - * newer kernels 3.7 onwards uses 46 bits. - */ - - info->max_physmem_bits = _MAX_PHYSMEM_BITS_ORIG ; - if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME())) - || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) - return TRUE; - - info->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7; - if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME())) - || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) - return TRUE; - - info->max_physmem_bits = _MAX_PHYSMEM_BITS_4_19; - if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME())) - || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) - return TRUE; - - info->max_physmem_bits = _MAX_PHYSMEM_BITS_4_20; - if ((array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT_EXTREME())) - || (array_len == (NR_MEM_SECTIONS() / _SECTIONS_PER_ROOT()))) - return TRUE; - - return FALSE; -} - int get_machdep_info_ppc64(void) { unsigned long vmlist, vmap_area_list, vmalloc_start; info->section_size_bits = _SECTION_SIZE_BITS; - if (!set_ppc64_max_physmem_bits()) { - ERRMSG("Can't detect max_physmem_bits.\n"); - return FALSE; - } + info->max_physmem_bits = _MAX_PHYSMEM_BITS_3_7; + info->page_offset = __PAGE_OFFSET; if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) { -- 2.21.0