|
@@ -536,10 +536,14 @@ static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-void __init setup_memory_region(void)
|
|
|
+void early_panic(char *msg)
|
|
|
{
|
|
|
- char *who = "BIOS-e820";
|
|
|
+ early_printk(msg);
|
|
|
+ panic(msg);
|
|
|
+}
|
|
|
|
|
|
+void __init setup_memory_region(void)
|
|
|
+{
|
|
|
/*
|
|
|
* Try to copy the BIOS-supplied E820-map.
|
|
|
*
|
|
@@ -547,24 +551,10 @@ void __init setup_memory_region(void)
|
|
|
* the next section from 1mb->appropriate_mem_k
|
|
|
*/
|
|
|
sanitize_e820_map(E820_MAP, &E820_MAP_NR);
|
|
|
- if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
|
|
|
- unsigned long mem_size;
|
|
|
-
|
|
|
- /* compare results from other methods and take the greater */
|
|
|
- if (ALT_MEM_K < EXT_MEM_K) {
|
|
|
- mem_size = EXT_MEM_K;
|
|
|
- who = "BIOS-88";
|
|
|
- } else {
|
|
|
- mem_size = ALT_MEM_K;
|
|
|
- who = "BIOS-e801";
|
|
|
- }
|
|
|
-
|
|
|
- e820.nr_map = 0;
|
|
|
- add_memory_region(0, LOWMEMSIZE(), E820_RAM);
|
|
|
- add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
|
|
|
- }
|
|
|
+ if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0)
|
|
|
+ early_panic("Cannot find a valid memory map");
|
|
|
printk(KERN_INFO "BIOS-provided physical RAM map:\n");
|
|
|
- e820_print_map(who);
|
|
|
+ e820_print_map("BIOS-e820");
|
|
|
}
|
|
|
|
|
|
static int __init parse_memopt(char *p)
|