[PATCH 1/4] kexec-tools: mips: Merge adjacent memory ranges.

Simon Horman horms at verge.net.au
Sun Oct 15 23:53:13 PDT 2017


On Thu, Oct 12, 2017 at 02:02:25PM -0700, David Daney wrote:
> Some kernel versions running on MIPS split the System RAM memory
> regions reported in /proc/iomem.  This may cause loading of the kexec
> kernel to fail if it crosses one of the splits.
> 
> Fix by merging adjacent memory ranges that have the same type.
> 
> Signed-off-by: David Daney <david.daney at cavium.com>
> ---
>  kexec/arch/mips/kexec-mips.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/kexec/arch/mips/kexec-mips.c b/kexec/arch/mips/kexec-mips.c
> index 2e5b700..415c2ed 100644
> --- a/kexec/arch/mips/kexec-mips.c
> +++ b/kexec/arch/mips/kexec-mips.c
> @@ -60,10 +60,16 @@ int get_memory_ranges(struct memory_range **range, int *ranges,
>  		} else {
>  			continue;
>  		}
> -		memory_range[memory_ranges].start = start;
> -		memory_range[memory_ranges].end = end;
> -		memory_range[memory_ranges].type = type;
> -		memory_ranges++;
> +		if (memory_ranges > 0 &&

It seems that this will never merge the first memory range
with subsequent ones. Is that intentional?


> +		    memory_range[memory_ranges - 1].end == start &&
> +		    memory_range[memory_ranges - 1].type == type) {
> +			memory_range[memory_ranges - 1].end = end;
> +		} else {
> +			memory_range[memory_ranges].start = start;
> +			memory_range[memory_ranges].end = end;
> +			memory_range[memory_ranges].type = type;
> +			memory_ranges++;
> +		}
>  	}
>  	fclose(fp);
>  	*range = memory_range;
> -- 
> 2.9.5
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec
> 



More information about the kexec mailing list