mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 21:57:43 +00:00
x86/traps: Have read_cr0() only once in the #NM handler
... instead of twice in the code. In any case, CR0 ends up being read once anyway: 1. The CONFIG_MATH_EMULATION case does so and exits. 2. The normal case does it once too. However, read it on function entry instead to make the code even simpler to follow. No functional changes. Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Andy Lutomirski <luto@kernel.org> Acked-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: x86@kernel.org Link: https://lkml.kernel.org/r/20190117120728.3811-1-bp@alien8.de
This commit is contained in:
parent
49a57857ae
commit
ee35b9b9f6
1 changed files with 2 additions and 3 deletions
|
@ -880,12 +880,12 @@ do_spurious_interrupt_bug(struct pt_regs *regs, long error_code)
|
||||||
dotraplinkage void
|
dotraplinkage void
|
||||||
do_device_not_available(struct pt_regs *regs, long error_code)
|
do_device_not_available(struct pt_regs *regs, long error_code)
|
||||||
{
|
{
|
||||||
unsigned long cr0;
|
unsigned long cr0 = read_cr0();
|
||||||
|
|
||||||
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
|
RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
|
||||||
|
|
||||||
#ifdef CONFIG_MATH_EMULATION
|
#ifdef CONFIG_MATH_EMULATION
|
||||||
if (!boot_cpu_has(X86_FEATURE_FPU) && (read_cr0() & X86_CR0_EM)) {
|
if (!boot_cpu_has(X86_FEATURE_FPU) && (cr0 & X86_CR0_EM)) {
|
||||||
struct math_emu_info info = { };
|
struct math_emu_info info = { };
|
||||||
|
|
||||||
cond_local_irq_enable(regs);
|
cond_local_irq_enable(regs);
|
||||||
|
@ -897,7 +897,6 @@ do_device_not_available(struct pt_regs *regs, long error_code)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This should not happen. */
|
/* This should not happen. */
|
||||||
cr0 = read_cr0();
|
|
||||||
if (WARN(cr0 & X86_CR0_TS, "CR0.TS was set")) {
|
if (WARN(cr0 & X86_CR0_TS, "CR0.TS was set")) {
|
||||||
/* Try to fix it up and carry on. */
|
/* Try to fix it up and carry on. */
|
||||||
write_cr0(cr0 & ~X86_CR0_TS);
|
write_cr0(cr0 & ~X86_CR0_TS);
|
||||||
|
|
Loading…
Reference in a new issue