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

David Daney david.daney at cavium.com
Thu Oct 12 14:02:25 PDT 2017


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




More information about the kexec mailing list