aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/setup.c')
-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 a2bb18e02839..468e98dfd44e 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -920,8 +920,21 @@ void __init setup_arch(char **cmdline_p)
920 920
921#ifdef CONFIG_X86_64 921#ifdef CONFIG_X86_64
922 if (max_pfn > max_low_pfn) { 922 if (max_pfn > max_low_pfn) {
923 max_pfn_mapped = init_memory_mapping(1UL<<32, 923 int i;
924 max_pfn<<PAGE_SHIFT); 924 for (i = 0; i < e820.nr_map; i++) {
925 struct e820entry *ei = &e820.map[i];
926
927 if (ei->addr + ei->size <= 1UL << 32)
928 continue;
929
930 if (ei->type == E820_RESERVED)
931 continue;
932
933 max_pfn_mapped = init_memory_mapping(
934 ei->addr < 1UL << 32 ? 1UL << 32 : ei->addr,
935 ei->addr + ei->size);
936 }
937
925 /* can we preseve max_low_pfn ?*/ 938 /* can we preseve max_low_pfn ?*/
926 max_low_pfn = max_pfn; 939 max_low_pfn = max_pfn;
927 } 940 }