| From acaf6a97d623af123314c2f8ce4cf7254f6b2fc1 Mon Sep 17 00:00:00 2001 |
| From: James Hogan <james.hogan@imgtec.com> |
| Date: Wed, 25 Feb 2015 13:08:05 +0000 |
| Subject: MIPS: lose_fpu(): Disable FPU when MSA enabled |
| |
| From: James Hogan <james.hogan@imgtec.com> |
| |
| commit acaf6a97d623af123314c2f8ce4cf7254f6b2fc1 upstream. |
| |
| The lose_fpu() function only disables the FPU in CP0_Status.CU1 if the |
| FPU is in use and MSA isn't enabled. |
| |
| This isn't necessarily a problem because KSTK_STATUS(current), the |
| version of CP0_Status stored on the kernel stack on entry from user |
| mode, does always get updated and gets restored when returning to user |
| mode, but I don't think it was intended, and it is inconsistent with the |
| case of only the FPU being in use. Sometimes leaving the FPU enabled may |
| also mask kernel bugs where FPU operations are executed when the FPU |
| might not be enabled. |
| |
| So lets disable the FPU in the MSA case too. |
| |
| Fixes: 33c771ba5c5d ("MIPS: save/disable MSA in lose_fpu") |
| Signed-off-by: James Hogan <james.hogan@imgtec.com> |
| Cc: Ralf Baechle <ralf@linux-mips.org> |
| Cc: Paul Burton <paul.burton@imgtec.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/9323/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/mips/include/asm/fpu.h | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/mips/include/asm/fpu.h |
| +++ b/arch/mips/include/asm/fpu.h |
| @@ -170,6 +170,7 @@ static inline void lose_fpu(int save) |
| } |
| disable_msa(); |
| clear_thread_flag(TIF_USEDMSA); |
| + __disable_fpu(); |
| } else if (is_fpu_owner()) { |
| if (save) |
| _save_fp(current); |