summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/setup.c
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2011-12-22 09:22:58 -0800
committerOlof Johansson <olof@lixom.net>2011-12-22 09:22:58 -0800
commit53bf82ce766b17436a6e9c672f9fa29702f3731e (patch)
tree50547bbc8d5c9f9156f1220b712a99e48dbaf43f /arch/x86/kernel/setup.c
parent5e8d3183bb605a937fc89b857691f75682aa099e (diff)
parent4a4de1d9b47156525ceb46c7faf6ae4042d90aa7 (diff)
Merge branch 'omap/fixes-hwmod' into next/fixes-non-critical
* omap/fixes-hwmod: (359 commits) ARM: OMAP: hwmod data: fix the panic on Nokia RM-680 during boot ARM: OMAP: hwmod data: fix iva and mailbox hwmods for OMAP 3 ARM: OMAP: rx51: fix USB ARM: OMAP: mcbsp: Fix possible memory corruption ...
Diffstat (limited to 'arch/x86/kernel/setup.c')
-rw-r--r--arch/x86/kernel/setup.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index cf0ef986cb6d..9a9e40fb091c 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -691,6 +691,8 @@ early_param("reservelow", parse_reservelow);
void __init setup_arch(char **cmdline_p)
{
+ unsigned long end_pfn;
+
#ifdef CONFIG_X86_32
memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
visws_early_detect();
@@ -932,7 +934,24 @@ void __init setup_arch(char **cmdline_p)
init_gbpages();
/* max_pfn_mapped is updated here */
- max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
+ end_pfn = max_low_pfn;
+
+#ifdef CONFIG_X86_64
+ /*
+ * There may be regions after the last E820_RAM region that we
+ * want to include in the kernel direct mapping, such as
+ * EFI_RUNTIME_SERVICES_DATA.
+ */
+ if (efi_enabled) {
+ unsigned long efi_end;
+
+ efi_end = e820_end_pfn(MAXMEM>>PAGE_SHIFT, E820_RESERVED_EFI);
+ if (efi_end > max_low_pfn)
+ end_pfn = efi_end;
+ }
+#endif
+
+ max_low_pfn_mapped = init_memory_mapping(0, end_pfn << PAGE_SHIFT);
max_pfn_mapped = max_low_pfn_mapped;
#ifdef CONFIG_X86_64