aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/setup.c17
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 }