diff options
Diffstat (limited to 'arch/x86/include/asm/tlbflush.h')
| -rw-r--r-- | arch/x86/include/asm/tlbflush.h | 18 | 
1 files changed, 12 insertions, 6 deletions
diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h index 0fee48e279c..50a7fc0f824 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -20,10 +20,20 @@ static inline void __native_flush_tlb(void)  	native_write_cr3(native_read_cr3());  } +static inline void __native_flush_tlb_global_irq_disabled(void) +{ +	unsigned long cr4; + +	cr4 = native_read_cr4(); +	/* clear PGE */ +	native_write_cr4(cr4 & ~X86_CR4_PGE); +	/* write old PGE again and flush TLBs */ +	native_write_cr4(cr4); +} +  static inline void __native_flush_tlb_global(void)  {  	unsigned long flags; -	unsigned long cr4;  	/*  	 * Read-modify-write to CR4 - protect it from preemption and @@ -32,11 +42,7 @@ static inline void __native_flush_tlb_global(void)  	 */  	raw_local_irq_save(flags); -	cr4 = native_read_cr4(); -	/* clear PGE */ -	native_write_cr4(cr4 & ~X86_CR4_PGE); -	/* write old PGE again and flush TLBs */ -	native_write_cr4(cr4); +	__native_flush_tlb_global_irq_disabled();  	raw_local_irq_restore(flags);  }  |