| From c46f59e90226fa5bfcc83650edebe84ae47d454b Mon Sep 17 00:00:00 2001 |
| From: James Cowgill <James.Cowgill@imgtec.com> |
| Date: Tue, 11 Apr 2017 13:51:07 +0100 |
| Subject: [PATCH] MIPS: Avoid BUG warning in arch_check_elf |
| |
| commit c46f59e90226fa5bfcc83650edebe84ae47d454b upstream. |
| |
| arch_check_elf contains a usage of current_cpu_data that will call |
| smp_processor_id() with preemption enabled and therefore triggers a |
| "BUG: using smp_processor_id() in preemptible" warning when an fpxx |
| executable is loaded. |
| |
| As a follow-up to commit b244614a60ab ("MIPS: Avoid a BUG warning during |
| prctl(PR_SET_FP_MODE, ...)"), apply the same fix to arch_check_elf by |
| using raw_current_cpu_data instead. The rationale quoted from the previous |
| commit: |
| |
| "It is assumed throughout the kernel that if any CPU has an FPU, then |
| all CPUs would have an FPU as well, so it is safe to perform the check |
| with preemption enabled - change the code to use raw_ variant of the |
| check to avoid the warning." |
| |
| Fixes: 46490b572544 ("MIPS: kernel: elf: Improve the overall ABI and FPU mode checks") |
| Signed-off-by: James Cowgill <James.Cowgill@imgtec.com> |
| CC: <stable@vger.kernel.org> # 4.0+ |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/15951/ |
| Signed-off-by: Ralf Baechle <ralf@linux-mips.org> |
| |
| diff --git a/arch/mips/kernel/elf.c b/arch/mips/kernel/elf.c |
| index 6430bff21fff..5c429d70e17f 100644 |
| --- a/arch/mips/kernel/elf.c |
| +++ b/arch/mips/kernel/elf.c |
| @@ -257,7 +257,7 @@ int arch_check_elf(void *_ehdr, bool has_interpreter, void *_interp_ehdr, |
| else if ((prog_req.fr1 && prog_req.frdefault) || |
| (prog_req.single && !prog_req.frdefault)) |
| /* Make sure 64-bit MIPS III/IV/64R1 will not pick FR1 */ |
| - state->overall_fp_mode = ((current_cpu_data.fpu_id & MIPS_FPIR_F64) && |
| + state->overall_fp_mode = ((raw_current_cpu_data.fpu_id & MIPS_FPIR_F64) && |
| cpu_has_mips_r2_r6) ? |
| FP_FR1 : FP_FR0; |
| else if (prog_req.fr1) |
| -- |
| 2.12.0 |
| |