summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/efi.c
diff options
context:
space:
mode:
authorHuang, Ying <ying.huang@intel.com>2008-02-13 10:22:41 +0100
committerIngo Molnar <mingo@elte.hu>2008-02-13 16:20:35 +0100
commit4de0d4a6d173351b023ab2855c3d331146a418e5 (patch)
tree59fd58a74fc693e8b7c2b769180abc8bcbd2df61 /arch/x86/kernel/efi.c
parentx86: EFI: fix use of unitialized variable and the cache logic (diff)
downloadlinux-4de0d4a6d173351b023ab2855c3d331146a418e5.tar.xz
linux-4de0d4a6d173351b023ab2855c3d331146a418e5.zip
x86: EFI runtime code mapping enhancement
This patch enhances EFI runtime code memory mapping as following: - Move __supported_pte_mask & _PAGE_NX checking before invoking runtime_code_page_mkexec(). This makes it possible for compiler to eliminate runtime_code_page_mkexec() on machine without NX support. - Use set_memory_x/nx in early_mapping_set_exec(). This eliminates the duplicated implementation. This patch has been tested on Intel x86_64 platform with EFI64/32 firmware. Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/efi.c')
-rw-r--r--arch/x86/kernel/efi.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c
index b4d523276f40..cbdf9bacc575 100644
--- a/arch/x86/kernel/efi.c
+++ b/arch/x86/kernel/efi.c
@@ -384,9 +384,6 @@ static void __init runtime_code_page_mkexec(void)
efi_memory_desc_t *md;
void *p;
- if (!(__supported_pte_mask & _PAGE_NX))
- return;
-
/* Make EFI runtime service code area executable */
for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
md = p;
@@ -476,7 +473,8 @@ void __init efi_enter_virtual_mode(void)
efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count;
efi.reset_system = virt_efi_reset_system;
efi.set_virtual_address_map = virt_efi_set_virtual_address_map;
- runtime_code_page_mkexec();
+ if (__supported_pte_mask & _PAGE_NX)
+ runtime_code_page_mkexec();
early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size);
memmap.map = NULL;
}