summaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/setup.c
diff options
context:
space:
mode:
authorMagnus Damm <damm@igel.co.jp>2008-10-09 18:42:55 +0900
committerPaul Mundt <lethal@linux-sh.org>2008-10-20 11:38:40 +0900
commit4aeaa223433355a281559033f1e7600bfd73238e (patch)
treefd8041c536da005a99ba3a094b43de09f27f0f88 /arch/sh/kernel/setup.c
parenta30c89ad41099f58922e0941e346e7c4371655b9 (diff)
sh: add dynamic crash base address support
Add support for dynamic crash kernel base address. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/setup.c')
-rw-r--r--arch/sh/kernel/setup.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
index 5767f0a84cd..e7152cc6930 100644
--- a/arch/sh/kernel/setup.c
+++ b/arch/sh/kernel/setup.c
@@ -147,6 +147,7 @@ static void __init reserve_crashkernel(void)
{
unsigned long long free_mem;
unsigned long long crash_size, crash_base;
+ void *vp;
int ret;
free_mem = ((unsigned long long)max_low_pfn - min_low_pfn) << PAGE_SHIFT;
@@ -155,12 +156,14 @@ static void __init reserve_crashkernel(void)
&crash_size, &crash_base);
if (ret == 0 && crash_size) {
if (crash_base <= 0) {
- printk(KERN_INFO "crashkernel reservation failed - "
- "you have to specify a base address\n");
- return;
- }
-
- if (reserve_bootmem(crash_base, crash_size,
+ vp = alloc_bootmem_nopanic(crash_size);
+ if (!vp) {
+ printk(KERN_INFO "crashkernel allocation "
+ "failed\n");
+ return;
+ }
+ crash_base = __pa(vp);
+ } else if (reserve_bootmem(crash_base, crash_size,
BOOTMEM_EXCLUSIVE) < 0) {
printk(KERN_INFO "crashkernel reservation failed - "
"memory is in use\n");