aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64')
-rw-r--r--arch/x86_64/kernel/e820.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/arch/x86_64/kernel/e820.c b/arch/x86_64/kernel/e820.c
index e06c2714ecf3..5d1275a93658 100644
--- a/arch/x86_64/kernel/e820.c
+++ b/arch/x86_64/kernel/e820.c
@@ -536,10 +536,14 @@ static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
536 return 0; 536 return 0;
537} 537}
538 538
539void __init setup_memory_region(void) 539void early_panic(char *msg)
540{ 540{
541 char *who = "BIOS-e820"; 541 early_printk(msg);
542 panic(msg);
543}
542 544
545void __init setup_memory_region(void)
546{
543 /* 547 /*
544 * Try to copy the BIOS-supplied E820-map. 548 * Try to copy the BIOS-supplied E820-map.
545 * 549 *
@@ -547,24 +551,10 @@ void __init setup_memory_region(void)
547 * the next section from 1mb->appropriate_mem_k 551 * the next section from 1mb->appropriate_mem_k
548 */ 552 */
549 sanitize_e820_map(E820_MAP, &E820_MAP_NR); 553 sanitize_e820_map(E820_MAP, &E820_MAP_NR);
550 if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { 554 if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0)
551 unsigned long mem_size; 555 early_panic("Cannot find a valid memory map");
552
553 /* compare results from other methods and take the greater */
554 if (ALT_MEM_K < EXT_MEM_K) {
555 mem_size = EXT_MEM_K;
556 who = "BIOS-88";
557 } else {
558 mem_size = ALT_MEM_K;
559 who = "BIOS-e801";
560 }
561
562 e820.nr_map = 0;
563 add_memory_region(0, LOWMEMSIZE(), E820_RAM);
564 add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
565 }
566 printk(KERN_INFO "BIOS-provided physical RAM map:\n"); 556 printk(KERN_INFO "BIOS-provided physical RAM map:\n");
567 e820_print_map(who); 557 e820_print_map("BIOS-e820");
568} 558}
569 559
570static int __init parse_memopt(char *p) 560static int __init parse_memopt(char *p)