summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/efi.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-03-13 01:29:17 +0100
committerIngo Molnar <mingo@elte.hu>2009-03-13 01:29:17 +0100
commit3c1f67d60e2b4f4455563928999fd41cc653645d (patch)
tree0d58c145a05fb09167f1ab6882b474eccb1f3563 /arch/x86/kernel/efi.c
parent03d78913f01e8f6599823f00357ed17b32747d3d (diff)
parent9ead64974b05501bbac0d63a47c99fa786d064ba (diff)
downloadkernel-crypto-3c1f67d60e2b4f4455563928999fd41cc653645d.tar.gz
kernel-crypto-3c1f67d60e2b4f4455563928999fd41cc653645d.tar.xz
kernel-crypto-3c1f67d60e2b4f4455563928999fd41cc653645d.zip
Merge branch 'linus' into core/locking
Diffstat (limited to 'arch/x86/kernel/efi.c')
-rw-r--r--arch/x86/kernel/efi.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c
index 1119d247fe1..eb1ef3b67dd 100644
--- a/arch/x86/kernel/efi.c
+++ b/arch/x86/kernel/efi.c
@@ -467,7 +467,7 @@ void __init efi_enter_virtual_mode(void)
efi_memory_desc_t *md;
efi_status_t status;
unsigned long size;
- u64 end, systab, addr, npages;
+ u64 end, systab, addr, npages, end_pfn;
void *p, *va;
efi.systab = NULL;
@@ -479,7 +479,10 @@ void __init efi_enter_virtual_mode(void)
size = md->num_pages << EFI_PAGE_SHIFT;
end = md->phys_addr + size;
- if (PFN_UP(end) <= max_low_pfn_mapped)
+ end_pfn = PFN_UP(end);
+ if (end_pfn <= max_low_pfn_mapped
+ || (end_pfn > (1UL << (32 - PAGE_SHIFT))
+ && end_pfn <= max_pfn_mapped))
va = __va(md->phys_addr);
else
va = efi_ioremap(md->phys_addr, size);