From 77e769bd1d1f8e2442bb9a62895e2de8f9cbb4b6 Mon Sep 17 00:00:00 2001 From: David Daney Date: Thu, 12 Oct 2017 14:02:25 -0700 Subject: kexec-tools: mips: Merge adjacent memory ranges. 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 Signed-off-by: Simon Horman --- kexec/arch/mips/kexec-mips.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'kexec') 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 && + 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; -- cgit