diff options
Diffstat (limited to 'arch/x86/kernel/efi.c')
-rw-r--r-- | arch/x86/kernel/efi.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c index 32dd62b36ff7..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) | |||
384 | efi_memory_desc_t *md; | 384 | efi_memory_desc_t *md; |
385 | void *p; | 385 | void *p; |
386 | 386 | ||
387 | if (!(__supported_pte_mask & _PAGE_NX)) | ||
388 | return; | ||
389 | |||
390 | /* Make EFI runtime service code area executable */ | 387 | /* Make EFI runtime service code area executable */ |
391 | for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { | 388 | for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) { |
392 | md = p; | 389 | md = p; |
@@ -428,9 +425,6 @@ void __init efi_enter_virtual_mode(void) | |||
428 | else | 425 | else |
429 | va = efi_ioremap(md->phys_addr, size); | 426 | va = efi_ioremap(md->phys_addr, size); |
430 | 427 | ||
431 | if (md->attribute & EFI_MEMORY_WB) | ||
432 | set_memory_uc(md->virt_addr, size); | ||
433 | |||
434 | md->virt_addr = (u64) (unsigned long) va; | 428 | md->virt_addr = (u64) (unsigned long) va; |
435 | 429 | ||
436 | if (!va) { | 430 | if (!va) { |
@@ -439,6 +433,9 @@ void __init efi_enter_virtual_mode(void) | |||
439 | continue; | 433 | continue; |
440 | } | 434 | } |
441 | 435 | ||
436 | if (!(md->attribute & EFI_MEMORY_WB)) | ||
437 | set_memory_uc(md->virt_addr, size); | ||
438 | |||
442 | systab = (u64) (unsigned long) efi_phys.systab; | 439 | systab = (u64) (unsigned long) efi_phys.systab; |
443 | if (md->phys_addr <= systab && systab < end) { | 440 | if (md->phys_addr <= systab && systab < end) { |
444 | systab += md->virt_addr - md->phys_addr; | 441 | systab += md->virt_addr - md->phys_addr; |
@@ -476,7 +473,8 @@ void __init efi_enter_virtual_mode(void) | |||
476 | efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count; | 473 | efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count; |
477 | efi.reset_system = virt_efi_reset_system; | 474 | efi.reset_system = virt_efi_reset_system; |
478 | efi.set_virtual_address_map = virt_efi_set_virtual_address_map; | 475 | efi.set_virtual_address_map = virt_efi_set_virtual_address_map; |
479 | runtime_code_page_mkexec(); | 476 | if (__supported_pte_mask & _PAGE_NX) |
477 | runtime_code_page_mkexec(); | ||
480 | early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size); | 478 | early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size); |
481 | memmap.map = NULL; | 479 | memmap.map = NULL; |
482 | } | 480 | } |