| From 80f23935cadb1c654e81951f5a8b7ceae0acc1b4 Mon Sep 17 00:00:00 2001 |
| From: Segher Boessenkool <segher@kernel.crashing.org> |
| Date: Thu, 6 Oct 2016 13:42:19 +0000 |
| Subject: powerpc: Convert cmp to cmpd in idle enter sequence |
| |
| From: Segher Boessenkool <segher@kernel.crashing.org> |
| |
| commit 80f23935cadb1c654e81951f5a8b7ceae0acc1b4 upstream. |
| |
| PowerPC's "cmp" instruction has four operands. Normally people write |
| "cmpw" or "cmpd" for the second cmp operand 0 or 1. But, frequently |
| people forget, and write "cmp" with just three operands. |
| |
| With older binutils this is silently accepted as if this was "cmpw", |
| while often "cmpd" is wanted. With newer binutils GAS will complain |
| about this for 64-bit code. For 32-bit code it still silently assumes |
| "cmpw" is what is meant. |
| |
| In this instance the code comes directly from ISA v2.07, including the |
| cmp, but cmpd is correct. Backport to stable so that new toolchains can |
| build old kernels. |
| |
| Fixes: 948cf67c4726 ("powerpc: Add NAP mode support on Power7 in HV mode") |
| Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> |
| Signed-off-by: Segher Boessenkool <segher@kernel.crashing.org> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/include/asm/cpuidle.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/powerpc/include/asm/cpuidle.h |
| +++ b/arch/powerpc/include/asm/cpuidle.h |
| @@ -26,7 +26,7 @@ extern u64 pnv_first_deep_stop_state; |
| std r0,0(r1); \ |
| ptesync; \ |
| ld r0,0(r1); \ |
| -1: cmp cr0,r0,r0; \ |
| +1: cmpd cr0,r0,r0; \ |
| bne 1b; \ |
| IDLE_INST; \ |
| b . |