[PATCH 3/5] kexec: X86: Do not exclude memory regions in each get_xy_memory_range() func

Thomas Renninger trenn at suse.de
Thu Apr 11 08:26:45 EDT 2013


This allows further code cleanup later.

CC: Simon Horman <horms at verge.net.au>
CC: kexec at lists.infradead.org

Signed-off-by: Thomas Renninger <trenn at suse.de>
Signed-off-by: Thomas Renninger <Thomas Renninger" trenn at suse.de>
---
 kexec/arch/i386/crashdump-x86.c |   47 +++++++++++++++------------------------
 1 files changed, 18 insertions(+), 29 deletions(-)

diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
index 3f8593d..a22768b 100644
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -181,7 +181,6 @@ static int get_kernel_vaddr_and_size(struct kexec_info *UNUSED(info),
 
 /* Forward Declaration. */
 static void segregate_lowmem_region(int *nr_ranges, unsigned long lowmem_limit);
-static int exclude_region(int *nr_ranges, uint64_t start, uint64_t end);
 
 /* Stores a sorted list of RAM memory ranges for which to create elf headers.
  * A separate program header is created for backup region */
@@ -207,11 +206,10 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
 				   int kexec_flags, unsigned long lowmem_limit)
 {
 	const char *iomem = proc_iomem();
-	int memory_ranges = 0, gart = 0;
+	int memory_ranges = 0;
 	char line[MAX_LINE];
 	FILE *fp;
 	unsigned long long start, end;
-	uint64_t gart_start = 0, gart_end = 0;
 
 	fp = fopen(iomem, "r");
 	if (!fp) {
@@ -249,11 +247,6 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
 			type = RANGE_ACPI_NVS;
 		} else if(memcmp(str,"reserved\n", 9) == 0 ) {
 			type = RANGE_RESERVED;
-		} else if (memcmp(str, "GART\n", 5) == 0) {
-			gart_start = start;
-			gart_end = end;
-			gart = 1;
-			continue;
 		} else {
 			continue;
 		}
@@ -284,18 +277,6 @@ static int get_crash_memory_ranges(struct memory_range **range, int *ranges,
 		crash_reserved_mem.end = mem_max;
 		crash_reserved_mem.type = RANGE_RAM;
 	}
-	if (exclude_region(&memory_ranges, crash_reserved_mem.start,
-				crash_reserved_mem.end) < 0)
-		return -1;
-	if (crash_reserved_low_mem.start &&
-	    exclude_region(&memory_ranges, crash_reserved_low_mem.start,
-				crash_reserved_low_mem.end) < 0)
-		return -1;
-	if (gart) {
-		/* exclude GART region if the system has one */
-		if (exclude_region(&memory_ranges, gart_start, gart_end) < 0)
-			return -1;
-	}
 	*range = crash_memory_range;
 	*ranges = memory_ranges;
 
@@ -351,10 +332,6 @@ static int get_crash_memory_ranges_xen(struct memory_range **range,
 
 	qsort(*range, *ranges, sizeof(struct memory_range), compare_ranges);
 
-	if (exclude_region(ranges, crash_reserved_mem.start,
-						crash_reserved_mem.end) < 0)
-		goto err;
-
 	ret = 0;
 
 err:
@@ -434,10 +411,6 @@ static int get_crash_memory_ranges_xen(struct memory_range **range,
 
 	qsort(*range, *ranges, sizeof(struct memory_range), compare_ranges);
 
-	if (exclude_region(ranges, crash_reserved_mem.start,
-						crash_reserved_mem.end) < 0)
-		goto err;
-
 	ret = 0;
 
 err:
@@ -941,6 +914,7 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
 	struct memory_range *mem_range, *memmap_p;
 	struct crash_elf_info elf_info;
 	unsigned kexec_arch;
+	uint64_t start, end;
 
 	memset(&elf_info, 0x0, sizeof(elf_info));
 
@@ -973,11 +947,26 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
 		if (get_crash_memory_ranges_xen(&mem_range, &nr_ranges,
 						elf_info.lowmem_limit) < 0)
 			return -1;
-	} else
+	} else {
 		if (get_crash_memory_ranges(&mem_range, &nr_ranges,
 						info->kexec_flags,
 						elf_info.lowmem_limit) < 0)
 			return -1;
+	}
+
+	if (exclude_region(&nr_ranges, crash_reserved_mem.start,
+				crash_reserved_mem.end) < 0)
+		return -1;
+	if (crash_reserved_low_mem.start &&
+	    exclude_region(&nr_ranges, crash_reserved_low_mem.start,
+				crash_reserved_low_mem.end) < 0)
+		return -1;
+
+	if (!parse_iomem_single("GART\n", &start, &end)) {
+		/* exclude GART region if the system has one */
+		if (exclude_region(&nr_ranges, start, end) < 0)
+			return -1;
+	}
 
 	get_backup_area(info, mem_range, nr_ranges);
 
-- 
1.7.6.1




More information about the kexec mailing list