diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-07-03 14:37:13 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-07-09 01:43:22 -0400 |
commit | a0a0becd2da0ba0d7f0204a61d1905926cdb163d (patch) | |
tree | f16af8006d20dbc19572766d9c810c19c90c141d /arch/x86/kernel/setup.c | |
parent | 0be15526beb4c228e0477221c62ec8ab0fc7440f (diff) |
x86: make e820_saved have update from setup_data
seperate reserve_setup_data into e820_reserved_setup_data,
and reserve_early_setup_data.
So could use e820_reserved_setup_data to backup e820 with setup_data.
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: Bernhard Walle <bwalle@suse.de>
Cc: Ying Huang <ying.huang@intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/setup.c')
-rw-r--r-- | arch/x86/kernel/setup.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index cfcfbefee0b9..bea8ae77d059 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
@@ -394,11 +394,10 @@ static void __init parse_setup_data(void) | |||
394 | } | 394 | } |
395 | } | 395 | } |
396 | 396 | ||
397 | static void __init reserve_setup_data(void) | 397 | static void __init e820_reserve_setup_data(void) |
398 | { | 398 | { |
399 | struct setup_data *data; | 399 | struct setup_data *data; |
400 | u64 pa_data; | 400 | u64 pa_data; |
401 | char buf[32]; | ||
402 | int found = 0; | 401 | int found = 0; |
403 | 402 | ||
404 | if (boot_params.hdr.version < 0x0209) | 403 | if (boot_params.hdr.version < 0x0209) |
@@ -406,8 +405,6 @@ static void __init reserve_setup_data(void) | |||
406 | pa_data = boot_params.hdr.setup_data; | 405 | pa_data = boot_params.hdr.setup_data; |
407 | while (pa_data) { | 406 | while (pa_data) { |
408 | data = early_ioremap(pa_data, sizeof(*data)); | 407 | data = early_ioremap(pa_data, sizeof(*data)); |
409 | sprintf(buf, "setup data %x", data->type); | ||
410 | reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf); | ||
411 | e820_update_range(pa_data, sizeof(*data)+data->len, | 408 | e820_update_range(pa_data, sizeof(*data)+data->len, |
412 | E820_RAM, E820_RESERVED_KERN); | 409 | E820_RAM, E820_RESERVED_KERN); |
413 | found = 1; | 410 | found = 1; |
@@ -418,10 +415,29 @@ static void __init reserve_setup_data(void) | |||
418 | return; | 415 | return; |
419 | 416 | ||
420 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); | 417 | sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map); |
418 | memcpy(&e820_saved, &e820, sizeof(struct e820map)); | ||
421 | printk(KERN_INFO "extended physical RAM map:\n"); | 419 | printk(KERN_INFO "extended physical RAM map:\n"); |
422 | e820_print_map("reserve setup_data"); | 420 | e820_print_map("reserve setup_data"); |
423 | } | 421 | } |
424 | 422 | ||
423 | static void __init reserve_early_setup_data(void) | ||
424 | { | ||
425 | struct setup_data *data; | ||
426 | u64 pa_data; | ||
427 | char buf[32]; | ||
428 | |||
429 | if (boot_params.hdr.version < 0x0209) | ||
430 | return; | ||
431 | pa_data = boot_params.hdr.setup_data; | ||
432 | while (pa_data) { | ||
433 | data = early_ioremap(pa_data, sizeof(*data)); | ||
434 | sprintf(buf, "setup data %x", data->type); | ||
435 | reserve_early(pa_data, pa_data+sizeof(*data)+data->len, buf); | ||
436 | pa_data = data->next; | ||
437 | early_iounmap(data, sizeof(*data)); | ||
438 | } | ||
439 | } | ||
440 | |||
425 | /* | 441 | /* |
426 | * --------- Crashkernel reservation ------------------------------ | 442 | * --------- Crashkernel reservation ------------------------------ |
427 | */ | 443 | */ |
@@ -626,6 +642,8 @@ void __init setup_arch(char **cmdline_p) | |||
626 | 642 | ||
627 | setup_memory_map(); | 643 | setup_memory_map(); |
628 | parse_setup_data(); | 644 | parse_setup_data(); |
645 | /* update the e820_saved too */ | ||
646 | e820_reserve_setup_data(); | ||
629 | 647 | ||
630 | copy_edd(); | 648 | copy_edd(); |
631 | 649 | ||
@@ -656,7 +674,7 @@ void __init setup_arch(char **cmdline_p) | |||
656 | parse_early_param(); | 674 | parse_early_param(); |
657 | 675 | ||
658 | /* after early param, so could get panic from serial */ | 676 | /* after early param, so could get panic from serial */ |
659 | reserve_setup_data(); | 677 | reserve_early_setup_data(); |
660 | 678 | ||
661 | if (acpi_mps_check()) { | 679 | if (acpi_mps_check()) { |
662 | #ifdef CONFIG_X86_LOCAL_APIC | 680 | #ifdef CONFIG_X86_LOCAL_APIC |