From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758593AbbEEQwW (ORCPT ); Tue, 5 May 2015 12:52:22 -0400 Received: from mail-wi0-f169.google.com ([209.85.212.169]:35698 "EHLO mail-wi0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761074AbbEEQ3R (ORCPT ); Tue, 5 May 2015 12:29:17 -0400 From: Ingo Molnar To: linux-kernel@vger.kernel.org Cc: Andy Lutomirski , Borislav Petkov , Dave Hansen , Fenghua Yu , "H. Peter Anvin" , Linus Torvalds , Oleg Nesterov , Thomas Gleixner Subject: [PATCH 058/208] x86/fpu: Use 'struct fpu' in restore_fpu_checking() Date: Tue, 5 May 2015 18:24:38 +0200 Message-Id: <1430843228-13749-59-git-send-email-mingo@kernel.org> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1430843228-13749-1-git-send-email-mingo@kernel.org> References: <1430843228-13749-1-git-send-email-mingo@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Migrate this function to pure 'struct fpu' usage. Reviewed-by: Borislav Petkov Cc: Andy Lutomirski Cc: Dave Hansen Cc: Fenghua Yu Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Oleg Nesterov Cc: Thomas Gleixner Signed-off-by: Ingo Molnar --- arch/x86/include/asm/fpu-internal.h | 10 ++++++---- arch/x86/kernel/fpu/core.c | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h index 3f6d36c6ffce..2d7934e4e394 100644 --- a/arch/x86/include/asm/fpu-internal.h +++ b/arch/x86/include/asm/fpu-internal.h @@ -294,7 +294,7 @@ static inline int fpu_restore_checking(struct fpu *fpu) return frstor_checking(&fpu->state->fsave); } -static inline int restore_fpu_checking(struct task_struct *tsk) +static inline int restore_fpu_checking(struct fpu *fpu) { /* * AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception is @@ -306,10 +306,10 @@ static inline int restore_fpu_checking(struct task_struct *tsk) "fnclex\n\t" "emms\n\t" "fildl %P[addr]" /* set F?P to defined value */ - : : [addr] "m" (tsk->thread.fpu.has_fpu)); + : : [addr] "m" (fpu->has_fpu)); } - return fpu_restore_checking(&tsk->thread.fpu); + return fpu_restore_checking(fpu); } /* Must be paired with an 'stts' after! */ @@ -456,8 +456,10 @@ 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) { + struct fpu *new_fpu = &new->thread.fpu; + if (fpu.preload) { - if (unlikely(restore_fpu_checking(new))) + if (unlikely(restore_fpu_checking(new_fpu))) fpu_reset_state(new); } } diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c index 59378e36b2ce..79e92cf02e31 100644 --- a/arch/x86/kernel/fpu/core.c +++ b/arch/x86/kernel/fpu/core.c @@ -116,7 +116,7 @@ void __kernel_fpu_end(void) struct fpu *fpu = &me->thread.fpu; if (fpu->has_fpu) { - if (WARN_ON(restore_fpu_checking(me))) + if (WARN_ON(restore_fpu_checking(fpu))) fpu_reset_state(me); } else if (!use_eager_fpu()) { stts(); @@ -370,7 +370,7 @@ void fpu__restore(void) /* Avoid __kernel_fpu_begin() right after __thread_fpu_begin() */ kernel_fpu_disable(); __thread_fpu_begin(fpu); - if (unlikely(restore_fpu_checking(tsk))) { + if (unlikely(restore_fpu_checking(fpu))) { fpu_reset_state(tsk); force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk); } else { -- 2.1.0