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 32dd62b36ff..cbdf9bacc57 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; @@ -428,9 +425,6 @@ void __init efi_enter_virtual_mode(void)  		else  			va = efi_ioremap(md->phys_addr, size); -		if (md->attribute & EFI_MEMORY_WB) -			set_memory_uc(md->virt_addr, size); -  		md->virt_addr = (u64) (unsigned long) va;  		if (!va) { @@ -439,6 +433,9 @@ void __init efi_enter_virtual_mode(void)  			continue;  		} +		if (!(md->attribute & EFI_MEMORY_WB)) +			set_memory_uc(md->virt_addr, size); +  		systab = (u64) (unsigned long) efi_phys.systab;  		if (md->phys_addr <= systab && systab < end) {  			systab += md->virt_addr - md->phys_addr; @@ -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;  } | 
