diff options
author | Russell King <rmk@arm.linux.org.uk> | 2016-06-06 18:01:08 +0100 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2016-06-08 09:24:10 +0900 |
commit | 921a8d1d5bb2e0b181f7a9471595520e3a325c81 (patch) | |
tree | 29a1fa156dfb30e00675cd39c028452cc04c72ec | |
parent | db8209860120ca7fbb589d01da3aaac972c5fc48 (diff) | |
download | kexec-tools-921a8d1d5bb2e0b181f7a9471595520e3a325c81.tar.gz |
arm: add support for boot-time crash kernel resource
Add support for detecting and using the boot-time crash kernel
resource, which is needed for systems which have special boot-time
memory views, such as Keystone 2.
Reviewed-by: Pratyush Anand <panand@redhat.com>
Signed-off-by: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r-- | kexec/arch/arm/crashdump-arm.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/kexec/arch/arm/crashdump-arm.c b/kexec/arch/arm/crashdump-arm.c index 9113f5ef..25fdbe9d 100644 --- a/kexec/arch/arm/crashdump-arm.c +++ b/kexec/arch/arm/crashdump-arm.c @@ -52,7 +52,7 @@ struct memory_ranges usablemem_rgns = { .ranges = crash_memory_ranges, }; -/* memory range reserved for crashkernel */ +/* The boot-time physical memory range reserved for crashkernel region */ static struct memory_range crash_kernel_mem; /* reserved regions */ @@ -366,13 +366,22 @@ static int iomem_range_callback(void *UNUSED(data), int UNUSED(nr), char *str, unsigned long long base, unsigned long long length) { - if (strncmp(str, CRASH_KERNEL, strlen(CRASH_KERNEL)) == 0) { + if (strncmp(str, CRASH_KERNEL_BOOT, strlen(CRASH_KERNEL_BOOT)) == 0) { crash_kernel_mem.start = base; crash_kernel_mem.end = base + length - 1; crash_kernel_mem.type = RANGE_RAM; return mem_regions_add(&crash_reserved_rgns, base, length, RANGE_RAM); } + else if (strncmp(str, CRASH_KERNEL, strlen(CRASH_KERNEL)) == 0) { + if (crash_kernel_mem.start == crash_kernel_mem.end) { + crash_kernel_mem.start = base; + crash_kernel_mem.end = base + length - 1; + crash_kernel_mem.type = RANGE_RAM; + } + return mem_regions_add(&crash_reserved_rgns, + base, length, RANGE_RAM); + } else if (strncmp(str, SYSTEM_RAM, strlen(SYSTEM_RAM)) == 0) { return mem_regions_add(&usablemem_rgns, base, length, RANGE_RAM); |