diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-09 21:16:03 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-09 21:16:03 -0500 |
| commit | 57d3629410599a1074b02f9b2139c2a6aa2b787e (patch) | |
| tree | 16e094aa6989b5b1c3c62a157e2537012c6697d8 | |
| parent | a8f76842142890883f46b8e7f57f87cf224a832a (diff) | |
| parent | d574ffa1066003569ed5cdaeabf44597564ce975 (diff) | |
Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 mm cleanups from Ingo Molnar:
"Two cleanups: simplify parse_setup_data() and sanitize_e820_map()
usage"
* 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86, e820: Clean up sanitize_e820_map() users
x86, setup: Let early_memremap() handle page alignment
| -rw-r--r-- | arch/x86/kernel/e820.c | 26 | ||||
| -rw-r--r-- | arch/x86/kernel/setup.c | 8 |
2 files changed, 11 insertions, 23 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"); |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index ab4734e5411d..c4648adadd7d 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -431,15 +431,13 @@ static void __init parse_setup_data(void) | |||
| 431 | 431 | ||
| 432 | pa_data = boot_params.hdr.setup_data; | 432 | pa_data = boot_params.hdr.setup_data; |
| 433 | while (pa_data) { | 433 | while (pa_data) { |
| 434 | u32 data_len, map_len, data_type; | 434 | u32 data_len, data_type; |
| 435 | 435 | ||
| 436 | map_len = max(PAGE_SIZE - (pa_data & ~PAGE_MASK), | 436 | data = early_memremap(pa_data, sizeof(*data)); |
| 437 | (u64)sizeof(struct setup_data)); | ||
| 438 | data = early_memremap(pa_data, map_len); | ||
| 439 | data_len = data->len + sizeof(struct setup_data); | 437 | data_len = data->len + sizeof(struct setup_data); |
| 440 | data_type = data->type; | 438 | data_type = data->type; |
| 441 | pa_next = data->next; | 439 | pa_next = data->next; |
| 442 | early_iounmap(data, map_len); | 440 | early_iounmap(data, sizeof(*data)); |
| 443 | 441 | ||
| 444 | switch (data_type) { | 442 | switch (data_type) { |
| 445 | case SETUP_E820_EXT: | 443 | case SETUP_E820_EXT: |
