[tip:x86/fpu] x86/fpu: Decouple fpregs_activate()/fpregs_deactivate() from fpu->fpregs_active

2017-09-26 Thread tip-bot for Ingo Molnar
Commit-ID:  6cf4edbe0526db311a28734609da888fdfcb3604
Gitweb: http://git.kernel.org/tip/6cf4edbe0526db311a28734609da888fdfcb3604
Author: Ingo Molnar 
AuthorDate: Sat, 23 Sep 2017 15:00:02 +0200
Committer:  Ingo Molnar 
CommitDate: Sun, 24 Sep 2017 13:04:34 +0200

x86/fpu: Decouple fpregs_activate()/fpregs_deactivate() from fpu->fpregs_active

The fpregs_activate()/fpregs_deactivate() are currently called in such a 
pattern:

if (!fpu->fpregs_active)
fpregs_activate(fpu);

...

if (fpu->fpregs_active)
fpregs_deactivate(fpu);

But note that it's actually safe to call them without checking the flag first.

This further decouples the fpu->fpregs_active flag from actual FPU logic.

Cc: Andrew Morton 
Cc: Andy Lutomirski 
Cc: Andy Lutomirski 
Cc: Borislav Petkov 
Cc: Dave Hansen 
Cc: Eric Biggers 
Cc: Fenghua Yu 
Cc: Linus Torvalds 
Cc: Oleg Nesterov 
Cc: Peter Zijlstra 
Cc: Rik van Riel 
Cc: Thomas Gleixner 
Cc: Yu-cheng Yu 
Link: http://lkml.kernel.org/r/20170923130016.21448-20-mi...@kernel.org
Signed-off-by: Ingo Molnar 
---
 arch/x86/include/asm/fpu/internal.h | 7 +--
 arch/x86/kernel/fpu/core.c  | 3 +--
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/arch/x86/include/asm/fpu/internal.h 
b/arch/x86/include/asm/fpu/internal.h
index 7fa676f..42a6016 100644
--- a/arch/x86/include/asm/fpu/internal.h
+++ b/arch/x86/include/asm/fpu/internal.h
@@ -526,8 +526,6 @@ static inline int fpregs_state_valid(struct fpu *fpu, 
unsigned int cpu)
  */
 static inline void fpregs_deactivate(struct fpu *fpu)
 {
-   WARN_ON_FPU(!fpu->fpregs_active);
-
fpu->fpregs_active = 0;
this_cpu_write(fpu_fpregs_owner_ctx, NULL);
trace_x86_fpu_regs_deactivated(fpu);
@@ -535,8 +533,6 @@ static inline void fpregs_deactivate(struct fpu *fpu)
 
 static inline void fpregs_activate(struct fpu *fpu)
 {
-   WARN_ON_FPU(fpu->fpregs_active);
-
fpu->fpregs_active = 1;
this_cpu_write(fpu_fpregs_owner_ctx, fpu);
trace_x86_fpu_regs_activated(fpu);
@@ -604,8 +600,7 @@ static inline void user_fpu_begin(void)
struct fpu *fpu = >thread.fpu;
 
preempt_disable();
-   if (!fpu->fpregs_active)
-   fpregs_activate(fpu);
+   fpregs_activate(fpu);
preempt_enable();
 }
 
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
index eab2446..01a47e9 100644
--- a/arch/x86/kernel/fpu/core.c
+++ b/arch/x86/kernel/fpu/core.c
@@ -426,8 +426,7 @@ void fpu__drop(struct fpu *fpu)
asm volatile("1: fwait\n"
 "2:\n"
 _ASM_EXTABLE(1b, 2b));
-   if (fpu->fpregs_active)
-   fpregs_deactivate(fpu);
+   fpregs_deactivate(fpu);
}
} else {
WARN_ON_FPU(fpu->fpregs_active);


[tip:x86/fpu] x86/fpu: Decouple fpregs_activate()/fpregs_deactivate() from fpu->fpregs_active

2017-09-26 Thread tip-bot for Ingo Molnar
Commit-ID:  6cf4edbe0526db311a28734609da888fdfcb3604
Gitweb: http://git.kernel.org/tip/6cf4edbe0526db311a28734609da888fdfcb3604
Author: Ingo Molnar 
AuthorDate: Sat, 23 Sep 2017 15:00:02 +0200
Committer:  Ingo Molnar 
CommitDate: Sun, 24 Sep 2017 13:04:34 +0200

x86/fpu: Decouple fpregs_activate()/fpregs_deactivate() from fpu->fpregs_active

The fpregs_activate()/fpregs_deactivate() are currently called in such a 
pattern:

if (!fpu->fpregs_active)
fpregs_activate(fpu);

...

if (fpu->fpregs_active)
fpregs_deactivate(fpu);

But note that it's actually safe to call them without checking the flag first.

This further decouples the fpu->fpregs_active flag from actual FPU logic.

Cc: Andrew Morton 
Cc: Andy Lutomirski 
Cc: Andy Lutomirski 
Cc: Borislav Petkov 
Cc: Dave Hansen 
Cc: Eric Biggers 
Cc: Fenghua Yu 
Cc: Linus Torvalds 
Cc: Oleg Nesterov 
Cc: Peter Zijlstra 
Cc: Rik van Riel 
Cc: Thomas Gleixner 
Cc: Yu-cheng Yu 
Link: http://lkml.kernel.org/r/20170923130016.21448-20-mi...@kernel.org
Signed-off-by: Ingo Molnar 
---
 arch/x86/include/asm/fpu/internal.h | 7 +--
 arch/x86/kernel/fpu/core.c  | 3 +--
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/arch/x86/include/asm/fpu/internal.h 
b/arch/x86/include/asm/fpu/internal.h
index 7fa676f..42a6016 100644
--- a/arch/x86/include/asm/fpu/internal.h
+++ b/arch/x86/include/asm/fpu/internal.h
@@ -526,8 +526,6 @@ static inline int fpregs_state_valid(struct fpu *fpu, 
unsigned int cpu)
  */
 static inline void fpregs_deactivate(struct fpu *fpu)
 {
-   WARN_ON_FPU(!fpu->fpregs_active);
-
fpu->fpregs_active = 0;
this_cpu_write(fpu_fpregs_owner_ctx, NULL);
trace_x86_fpu_regs_deactivated(fpu);
@@ -535,8 +533,6 @@ static inline void fpregs_deactivate(struct fpu *fpu)
 
 static inline void fpregs_activate(struct fpu *fpu)
 {
-   WARN_ON_FPU(fpu->fpregs_active);
-
fpu->fpregs_active = 1;
this_cpu_write(fpu_fpregs_owner_ctx, fpu);
trace_x86_fpu_regs_activated(fpu);
@@ -604,8 +600,7 @@ static inline void user_fpu_begin(void)
struct fpu *fpu = >thread.fpu;
 
preempt_disable();
-   if (!fpu->fpregs_active)
-   fpregs_activate(fpu);
+   fpregs_activate(fpu);
preempt_enable();
 }
 
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
index eab2446..01a47e9 100644
--- a/arch/x86/kernel/fpu/core.c
+++ b/arch/x86/kernel/fpu/core.c
@@ -426,8 +426,7 @@ void fpu__drop(struct fpu *fpu)
asm volatile("1: fwait\n"
 "2:\n"
 _ASM_EXTABLE(1b, 2b));
-   if (fpu->fpregs_active)
-   fpregs_deactivate(fpu);
+   fpregs_deactivate(fpu);
}
} else {
WARN_ON_FPU(fpu->fpregs_active);