diff options
Diffstat (limited to 'arch/ia64/kernel/setup.c')
-rw-r--r-- | arch/ia64/kernel/setup.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 14e1200376a9..ad567b8d432e 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); |
@@ -434,6 +440,21 @@ static __init int setup_nomca(char *s) | |||
434 | } | 440 | } |
435 | early_param("nomca", setup_nomca); | 441 | early_param("nomca", setup_nomca); |
436 | 442 | ||
443 | #ifdef CONFIG_PROC_VMCORE | ||
444 | /* elfcorehdr= specifies the location of elf core header | ||
445 | * stored by the crashed kernel. | ||
446 | */ | ||
447 | static int __init parse_elfcorehdr(char *arg) | ||
448 | { | ||
449 | if (!arg) | ||
450 | return -EINVAL; | ||
451 | |||
452 | elfcorehdr_addr = memparse(arg, &arg); | ||
453 | return 0; | ||
454 | } | ||
455 | early_param("elfcorehdr", parse_elfcorehdr); | ||
456 | #endif /* CONFIG_PROC_VMCORE */ | ||
457 | |||
437 | void __init | 458 | void __init |
438 | setup_arch (char **cmdline_p) | 459 | setup_arch (char **cmdline_p) |
439 | { | 460 | { |
@@ -653,6 +674,7 @@ get_model_name(__u8 family, __u8 model) | |||
653 | { | 674 | { |
654 | char brand[128]; | 675 | char brand[128]; |
655 | 676 | ||
677 | memcpy(brand, "Unknown", 8); | ||
656 | if (ia64_pal_get_brand_info(brand)) { | 678 | if (ia64_pal_get_brand_info(brand)) { |
657 | if (family == 0x7) | 679 | if (family == 0x7) |
658 | memcpy(brand, "Merced", 7); | 680 | memcpy(brand, "Merced", 7); |
@@ -660,8 +682,7 @@ get_model_name(__u8 family, __u8 model) | |||
660 | case 0: memcpy(brand, "McKinley", 9); break; | 682 | case 0: memcpy(brand, "McKinley", 9); break; |
661 | case 1: memcpy(brand, "Madison", 8); break; | 683 | case 1: memcpy(brand, "Madison", 8); break; |
662 | case 2: memcpy(brand, "Madison up to 9M cache", 23); break; | 684 | case 2: memcpy(brand, "Madison up to 9M cache", 23); break; |
663 | } else | 685 | } |
664 | memcpy(brand, "Unknown", 8); | ||
665 | } | 686 | } |
666 | if (brandname[0] == '\0') | 687 | if (brandname[0] == '\0') |
667 | return strcpy(brandname, brand); | 688 | return strcpy(brandname, brand); |