diff options
-rw-r--r-- | arch/ia64/kernel/setup.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 66377baea6a5..be398451d45c 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -256,7 +256,7 @@ reserve_memory (void) | |||
256 | 256 | ||
257 | #ifdef CONFIG_KEXEC | 257 | #ifdef CONFIG_KEXEC |
258 | /* crashkernel=size@offset specifies the size to reserve for a crash | 258 | /* crashkernel=size@offset specifies the size to reserve for a crash |
259 | * kernel.(offset is ingored for keep compatibility with other archs) | 259 | * kernel. If offset is 0, then it is determined automatically. |
260 | * By reserving this memory we guarantee that linux never set's it | 260 | * By reserving this memory we guarantee that linux never set's it |
261 | * up as a DMA target.Useful for holding code to do something | 261 | * up as a DMA target.Useful for holding code to do something |
262 | * appropriate after a kernel panic. | 262 | * appropriate after a kernel panic. |
@@ -266,10 +266,16 @@ reserve_memory (void) | |||
266 | unsigned long base, size; | 266 | unsigned long base, size; |
267 | if (from) { | 267 | if (from) { |
268 | size = memparse(from + 12, &from); | 268 | size = memparse(from + 12, &from); |
269 | if (*from == '@') | ||
270 | base = memparse(from+1, &from); | ||
271 | else | ||
272 | base = 0; | ||
269 | if (size) { | 273 | if (size) { |
270 | sort_regions(rsvd_region, n); | 274 | if (!base) { |
271 | base = kdump_find_rsvd_region(size, | 275 | sort_regions(rsvd_region, n); |
272 | rsvd_region, n); | 276 | base = kdump_find_rsvd_region(size, |
277 | rsvd_region, n); | ||
278 | } | ||
273 | if (base != ~0UL) { | 279 | if (base != ~0UL) { |
274 | rsvd_region[n].start = | 280 | rsvd_region[n].start = |
275 | (unsigned long)__va(base); | 281 | (unsigned long)__va(base); |