From 1100580b05e3fdfe648d9be8617d962b11f4b88b Mon Sep 17 00:00:00 2001 From: Amerigo Wang Date: Thu, 3 Mar 2011 00:10:43 +0800 Subject: get the backup area dynamically Currently we hard-coded the first 640K area as backup area, however, this is not correct on some system which has reserved memory area in the first 640K: BIOS-e820: 0000000000010000 - 0000000000097000 (usable) BIOS-e820: 0000000000097000 - 00000000000a0000 (reserved) on such system we still mark all the first 640K as usable in capture kernel, this will cause kernel panic. The solution, pointed by Vivek, is that we can get the backup area dynamically by reading /proc/iomem. The reporter has tested this patch and it fixes the problem. Signed-off-by: WANG Cong Acked-by: Vivek Goyal Signed-off-by: Simon Horman --- purgatory/arch/i386/crashdump_backup.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'purgatory') diff --git a/purgatory/arch/i386/crashdump_backup.c b/purgatory/arch/i386/crashdump_backup.c index c619446..365eb5d 100644 --- a/purgatory/arch/i386/crashdump_backup.c +++ b/purgatory/arch/i386/crashdump_backup.c @@ -20,13 +20,15 @@ #include #include -#include "../../../kexec/arch/i386/crashdump-x86.h" /* Backup region start gets set after /proc/iomem has been parsed. */ /* We reuse the same code for x86_64 also so changing backup_start to unsigned long */ unsigned long backup_start = 0; +unsigned long backup_src_start = 0; +unsigned long backup_src_size = 0; + /* Backup first 640K of memory to backup region as reserved by kexec. * Assuming first 640K has to be present on i386 machines and no address * validity checks have to be performed. */ @@ -34,11 +36,16 @@ unsigned long backup_start = 0; void crashdump_backup_memory(void) { void *dest, *src; + size_t size; + + src = (void *) backup_src_start; + size = (size_t) backup_src_size; - src = (void *) BACKUP_SRC_START; + if (!size) + return; if (backup_start) { dest = (void *)(backup_start); - memcpy(dest, src, BACKUP_SRC_SIZE); + memcpy(dest, src, size); } } -- cgit