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

Dave Anderson anderson at redhat.com
Tue Dec 4 15:20:49 UTC 2018



----- Original Message -----
> 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>

Thanks Hari -- queued for crash-7.2.5:

  https://github.com/crash-utility/crash/commit/fb185074415db0a63f900f46ac8635b6ed248100

Dave


> ---
>  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