diff options
| -rw-r--r-- | arch/x86/kernel/setup.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index f4b9b80e1b95..198e774498ec 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -919,8 +919,21 @@ void __init setup_arch(char **cmdline_p) | |||
| 919 | 919 | ||
| 920 | #ifdef CONFIG_X86_64 | 920 | #ifdef CONFIG_X86_64 |
| 921 | if (max_pfn > max_low_pfn) { | 921 | if (max_pfn > max_low_pfn) { |
| 922 | max_pfn_mapped = init_memory_mapping(1UL<<32, | 922 | int i; |
| 923 | max_pfn<<PAGE_SHIFT); | 923 | for (i = 0; i < e820.nr_map; i++) { |
| 924 | struct e820entry *ei = &e820.map[i]; | ||
| 925 | |||
| 926 | if (ei->addr + ei->size <= 1UL << 32) | ||
| 927 | continue; | ||
| 928 | |||
| 929 | if (ei->type == E820_RESERVED) | ||
| 930 | continue; | ||
| 931 | |||
| 932 | max_pfn_mapped = init_memory_mapping( | ||
| 933 | ei->addr < 1UL << 32 ? 1UL << 32 : ei->addr, | ||
| 934 | ei->addr + ei->size); | ||
| 935 | } | ||
| 936 | |||
| 924 | /* can we preseve max_low_pfn ?*/ | 937 | /* can we preseve max_low_pfn ?*/ |
| 925 | max_low_pfn = max_pfn; | 938 | max_low_pfn = max_pfn; |
| 926 | } | 939 | } |
