diff options
Diffstat (limited to 'arch/x86/kernel/e820.c')
-rw-r--r-- | arch/x86/kernel/e820.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index dd2f07ae9d0c..46201deee923 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -184,9 +184,9 @@ void __init e820_print_map(char *who) | |||
184 | * overwritten in the same location, starting at biosmap. | 184 | * overwritten in the same location, starting at biosmap. |
185 | * | 185 | * |
186 | * The integer pointed to by pnr_map must be valid on entry (the | 186 | * The integer pointed to by pnr_map must be valid on entry (the |
187 | * current number of valid entries located at biosmap) and will | 187 | * current number of valid entries located at biosmap). If the |
188 | * be updated on return, with the new number of valid entries | 188 | * sanitizing succeeds the *pnr_map will be updated with the new |
189 | * (something no more than max_nr_map.) | 189 | * number of valid entries (something no more than max_nr_map). |
190 | * | 190 | * |
191 | * The return value from sanitize_e820_map() is zero if it | 191 | * The return value from sanitize_e820_map() is zero if it |
192 | * successfully 'sanitized' the map entries passed in, and is -1 | 192 | * successfully 'sanitized' the map entries passed in, and is -1 |
@@ -561,23 +561,15 @@ u64 __init e820_remove_range(u64 start, u64 size, unsigned old_type, | |||
561 | 561 | ||
562 | void __init update_e820(void) | 562 | void __init update_e820(void) |
563 | { | 563 | { |
564 | u32 nr_map; | 564 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map)) |
565 | |||
566 | nr_map = e820.nr_map; | ||
567 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr_map)) | ||
568 | return; | 565 | return; |
569 | e820.nr_map = nr_map; | ||
570 | printk(KERN_INFO "e820: modified physical RAM map:\n"); | 566 | printk(KERN_INFO "e820: modified physical RAM map:\n"); |
571 | e820_print_map("modified"); | 567 | e820_print_map("modified"); |
572 | } | 568 | } |
573 | static void __init update_e820_saved(void) | 569 | static void __init update_e820_saved(void) |
574 | { | 570 | { |
575 | u32 nr_map; | 571 | sanitize_e820_map(e820_saved.map, ARRAY_SIZE(e820_saved.map), |
576 | 572 | &e820_saved.nr_map); | |
577 | nr_map = e820_saved.nr_map; | ||
578 | if (sanitize_e820_map(e820_saved.map, ARRAY_SIZE(e820_saved.map), &nr_map)) | ||
579 | return; | ||
580 | e820_saved.nr_map = nr_map; | ||
581 | } | 573 | } |
582 | #define MAX_GAP_END 0x100000000ull | 574 | #define MAX_GAP_END 0x100000000ull |
583 | /* | 575 | /* |
@@ -898,11 +890,9 @@ early_param("memmap", parse_memmap_opt); | |||
898 | void __init finish_e820_parsing(void) | 890 | void __init finish_e820_parsing(void) |
899 | { | 891 | { |
900 | if (userdef) { | 892 | if (userdef) { |
901 | u32 nr = e820.nr_map; | 893 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), |
902 | 894 | &e820.nr_map) < 0) | |
903 | if (sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &nr) < 0) | ||
904 | early_panic("Invalid user supplied memory map"); | 895 | early_panic("Invalid user supplied memory map"); |
905 | e820.nr_map = nr; | ||
906 | 896 | ||
907 | printk(KERN_INFO "e820: user-defined physical RAM map:\n"); | 897 | printk(KERN_INFO "e820: user-defined physical RAM map:\n"); |
908 | e820_print_map("user"); | 898 | e820_print_map("user"); |