summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kexec/arch/ppc64/crashdump-ppc64.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/kexec/arch/ppc64/crashdump-ppc64.c b/kexec/arch/ppc64/crashdump-ppc64.c
index b3c8928..f62b159 100644
--- a/kexec/arch/ppc64/crashdump-ppc64.c
+++ b/kexec/arch/ppc64/crashdump-ppc64.c
@@ -123,6 +123,7 @@ static void exclude_crash_region(uint64_t start, uint64_t end)
static int get_dyn_reconf_crash_memory_ranges(void)
{
uint64_t start, end;
+ uint64_t startrange, endrange;
char fname[128], buf[32];
FILE *file;
unsigned int i;
@@ -137,6 +138,7 @@ static int get_dyn_reconf_crash_memory_ranges(void)
}
fseek(file, 4, SEEK_SET);
+ startrange = endrange = 0;
for (i = 0; i < num_of_lmbs; i++) {
if ((n = fread(buf, 1, 24, file)) < 0) {
perror(fname);
@@ -162,8 +164,16 @@ static int get_dyn_reconf_crash_memory_ranges(void)
if ((flags & 0x80) || !(flags & 0x8))
continue;
- exclude_crash_region(start, end);
+ if (start != endrange) {
+ if (startrange != endrange)
+ exclude_crash_region(startrange, endrange);
+ startrange = start;
+ }
+ endrange = end;
}
+ if (startrange != endrange)
+ exclude_crash_region(startrange, endrange);
+
fclose(file);
return 0;
}