diff options
Diffstat (limited to 'arch/x86/kernel/alternative.c')
| -rw-r--r-- | arch/x86/kernel/alternative.c | 6 | 
1 files changed, 3 insertions, 3 deletions
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index d1175533d125..c3daf0aaa0ee 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -875,8 +875,6 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)  	 */  	BUG_ON(!pages[0] || (cross_page_boundary && !pages[1])); -	local_irq_save(flags); -  	/*  	 * Map the page without the global bit, as TLB flushing is done with  	 * flush_tlb_mm_range(), which is intended for non-global PTEs. @@ -893,6 +891,8 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)  	 */  	VM_BUG_ON(!ptep); +	local_irq_save(flags); +  	pte = mk_pte(pages[0], pgprot);  	set_pte_at(poking_mm, poking_addr, ptep, pte); @@ -942,8 +942,8 @@ static void *__text_poke(void *addr, const void *opcode, size_t len)  	 */  	BUG_ON(memcmp(addr, opcode, len)); -	pte_unmap_unlock(ptep, ptl);  	local_irq_restore(flags); +	pte_unmap_unlock(ptep, ptl);  	return addr;  }  | 
