All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Suresh Siddha <sbsiddha@gmail.com>, "H. Peter Anvin" <hpa@zytor.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>, Ingo Molnar <mingo@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v2 5/5] x86, fpu: introduce try_to_restore_fpu()
Date: Fri, 5 Sep 2014 15:43:53 +0200	[thread overview]
Message-ID: <20140905134353.GA14262@redhat.com> (raw)
In-Reply-To: <20140905134325.GA14228@redhat.com>

Cosmetic. Every caller of restore_fpu_checking() does drop_init_fpu()
on failure, add the trivial helper and update the callers.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
 arch/x86/include/asm/fpu-internal.h |   15 +++++++++++----
 arch/x86/kernel/i387.c              |    8 +++-----
 arch/x86/kernel/traps.c             |    8 +++-----
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
index 4cbb40e..e71c7f5 100644
--- a/arch/x86/include/asm/fpu-internal.h
+++ b/arch/x86/include/asm/fpu-internal.h
@@ -384,6 +384,15 @@ static inline void drop_init_fpu(struct task_struct *tsk)
 	}
 }
 
+static inline bool try_to_restore_fpu(struct task_struct *tsk)
+{
+	if (unlikely(restore_fpu_checking(tsk))) {
+		drop_init_fpu(tsk);
+		return false;
+	}
+	return true;
+}
+
 /*
  * FPU state switching for scheduling.
  *
@@ -462,10 +471,8 @@ static inline fpu_switch_t switch_fpu_prepare(struct task_struct *old, struct ta
  */
 static inline void switch_fpu_finish(struct task_struct *new, fpu_switch_t fpu)
 {
-	if (fpu.preload) {
-		if (unlikely(restore_fpu_checking(new)))
-			drop_init_fpu(new);
-	}
+	if (fpu.preload)
+		try_to_restore_fpu(new);
 }
 
 /*
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
index ece91cf..1918f67 100644
--- a/arch/x86/kernel/i387.c
+++ b/arch/x86/kernel/i387.c
@@ -104,12 +104,10 @@ void __kernel_fpu_end(void)
 {
 	struct task_struct *me = current;
 
-	if (__thread_has_fpu(me)) {
-		if (WARN_ON(restore_fpu_checking(me)))
-			drop_init_fpu(me);
-	} else if (!use_eager_fpu()) {
+	if (__thread_has_fpu(me))
+		WARN_ON(!try_to_restore_fpu(me));
+	else if (!use_eager_fpu())
 		stts();
-	}
 
 	this_cpu_write(in_kernel_fpu, false);
 }
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index c632843..f516cf1 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -670,12 +670,10 @@ void math_state_restore(void)
 	/* Avoid __kernel_fpu_begin() right after __thread_fpu_begin() */
 	kernel_fpu_disable();
 	__thread_fpu_begin(tsk);
-	if (unlikely(restore_fpu_checking(tsk))) {
-		drop_init_fpu(tsk);
-		force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk);
-	} else {
+	if (likely(try_to_restore_fpu(tsk)))
 		tsk->thread.fpu_counter++;
-	}
+	else
+		force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk);
 	kernel_fpu_enable();
 }
 EXPORT_SYMBOL_GPL(math_state_restore);
-- 
1.5.5.1


      parent reply	other threads:[~2014-09-05 13:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-05 13:43 [PATCH v2 0/5] x86, fpu: kernel_fpu_begin/end fixes/cleanups Oleg Nesterov
2014-09-05 13:43 ` [PATCH v2 1/5] x86, fpu: introduce per-cpu "bool in_kernel_fpu" Oleg Nesterov
2014-09-05 13:43 ` [PATCH v2 2/5] x86, fpu: don't abuse ->has_fpu in __kernel_fpu_{begin,end}() Oleg Nesterov
2014-09-05 13:43 ` [PATCH v2 3/5] x86, fpu: irq_fpu_usable: always return true if use_eager_fpu() Oleg Nesterov
2014-09-05 13:43 ` [PATCH v2 4/5] x86, fpu: fix math_state_restore() race with kernel_fpu_begin() Oleg Nesterov
2014-09-05 13:43 ` Oleg Nesterov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140905134353.GA14262@redhat.com \
    --to=oleg@redhat.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=sbsiddha@gmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.