lkml.org 
[lkml]   [2009]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] Fix e820 end address with EFI

On some EFI systems (i.e. Apple) EFI runtime is mapped into higher mem
regions. These EFI mem regions are not always taken into consideration when
max_pfn is calculated in setup.c being that e820_end_of_ram_pfn() only
counts
mappings types marked as usable (E820_RAM). Currently we only count to
the last
usable e820 address range and nothing beyond. EFI can be mapped anywhere
within
e820 and is not always marked as usable e820, and so EFI runtime may be
missed
if mapped somewhere beyond last usable e820. This patch attempts to resolve
this problem by including all E820 mappings when EFI is enabled, so that
the entire e820 (and EFI runtime area) is included in computing max_pfn.
Tested
on a MacBook Pro 3.1 and resolves the issue (system now boots
w/elilo+grub & EFI).

Signed-off-by: Brian Maly <bmaly@redhat>


e820.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)




--- a/arch/x86/kernel/e820.c 2009-02-08 15:37:27.000000000 -0500
+++ b/arch/x86/kernel/e820.c 2009-02-28 07:20:09.000000000 -0500
@@ -51,6 +51,10 @@ unsigned long pci_mem_start = 0xaeedbabe
EXPORT_SYMBOL(pci_mem_start);
#endif

+#ifdef CONFIG_EFI
+extern int efi_enabled;
+#endif
+
/*
* This function checks if any part of the range <start,end> is mapped
* with type.
@@ -1071,7 +1075,7 @@ static unsigned long __init e820_end_pfn
unsigned long start_pfn;
unsigned long end_pfn;

- if (ei->type != type)
+ if (type && (ei->type != type))
continue;

start_pfn = ei->addr >> PAGE_SHIFT;
@@ -1096,7 +1100,12 @@ static unsigned long __init e820_end_pfn
}
unsigned long __init e820_end_of_ram_pfn(void)
{
- return e820_end_pfn(MAX_ARCH_PFN, E820_RAM);
+#ifdef CONFIG_EFI
+ if (efi_enabled)
+ return e820_end_pfn(MAX_ARCH_PFN, NULL);
+ else
+#endif
+ return e820_end_pfn(MAX_ARCH_PFN, E820_RAM);
}

unsigned long __init e820_end_of_low_ram_pfn(void)
\
 
 \ /
  Last update: 2009-02-28 17:29    [W:1.797 / U:0.012 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site