Commit 0c3292ca authored by Nadav Amit's avatar Nadav Amit Committed by Thomas Gleixner

x86/tlb: Refactor CR4 setting and shadow write

Refactor the write to CR4 and its shadow value. This is done in
preparation for the addition of an assertion to check that IRQs are
disabled during CR4 update.

No functional change.
Signed-off-by: default avatarNadav Amit <namit@vmware.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: nadav.amit@gmail.com
Cc: Andy Lutomirski <luto@kernel.org>
Cc: linux-edac@vger.kernel.org
Link: https://lkml.kernel.org/r/20171125032907.2241-2-namit@vmware.com
parent 12a78d43
...@@ -173,17 +173,20 @@ static inline void cr4_init_shadow(void) ...@@ -173,17 +173,20 @@ static inline void cr4_init_shadow(void)
this_cpu_write(cpu_tlbstate.cr4, __read_cr4()); this_cpu_write(cpu_tlbstate.cr4, __read_cr4());
} }
static inline void __cr4_set(unsigned long cr4)
{
this_cpu_write(cpu_tlbstate.cr4, cr4);
__write_cr4(cr4);
}
/* Set in this cpu's CR4. */ /* Set in this cpu's CR4. */
static inline void cr4_set_bits(unsigned long mask) static inline void cr4_set_bits(unsigned long mask)
{ {
unsigned long cr4; unsigned long cr4;
cr4 = this_cpu_read(cpu_tlbstate.cr4); cr4 = this_cpu_read(cpu_tlbstate.cr4);
if ((cr4 | mask) != cr4) { if ((cr4 | mask) != cr4)
cr4 |= mask; __cr4_set(cr4 | mask);
this_cpu_write(cpu_tlbstate.cr4, cr4);
__write_cr4(cr4);
}
} }
/* Clear in this cpu's CR4. */ /* Clear in this cpu's CR4. */
...@@ -192,11 +195,8 @@ static inline void cr4_clear_bits(unsigned long mask) ...@@ -192,11 +195,8 @@ static inline void cr4_clear_bits(unsigned long mask)
unsigned long cr4; unsigned long cr4;
cr4 = this_cpu_read(cpu_tlbstate.cr4); cr4 = this_cpu_read(cpu_tlbstate.cr4);
if ((cr4 & ~mask) != cr4) { if ((cr4 & ~mask) != cr4)
cr4 &= ~mask; __cr4_set(cr4 & ~mask);
this_cpu_write(cpu_tlbstate.cr4, cr4);
__write_cr4(cr4);
}
} }
static inline void cr4_toggle_bits(unsigned long mask) static inline void cr4_toggle_bits(unsigned long mask)
...@@ -204,9 +204,7 @@ static inline void cr4_toggle_bits(unsigned long mask) ...@@ -204,9 +204,7 @@ static inline void cr4_toggle_bits(unsigned long mask)
unsigned long cr4; unsigned long cr4;
cr4 = this_cpu_read(cpu_tlbstate.cr4); cr4 = this_cpu_read(cpu_tlbstate.cr4);
cr4 ^= mask; __cr4_set(cr4 ^ mask);
this_cpu_write(cpu_tlbstate.cr4, cr4);
__write_cr4(cr4);
} }
/* Read the CR4 shadow. */ /* Read the CR4 shadow. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment