From: Philippe Bergheaud <felix@linux.vnet.ibm.com>
Subject: powerpc/relocate fix relocate processing in LE mode
Git-commit: 3b830c824a8b15bf032eafe09c48a09d2441f16d
Patch-mainline: v3.14-rc3
References: bnc#865994 fate#315275, LTC#104787

Summary:     SLES 12 - Additional POWER LE kernel patches for SLES 12 Beta2
Description: Add little-endian support for POWER8.

Upstream-Description:

    Relocation's code is not working in little endian mode because the r_info
    field, which is a 64 bits value, should be read from the right offset.
    
    The current code is optimized to read the r_info field as a 32 bits value
    starting at the middle of the double word (offset 12). When running in LE
    mode, the read value is not correct since only the MSB is read.
    
    This patch removes this optimization which consist to deal with a 32 bits
    value instead of a 64 bits one. This way it works in big and little endian
    mode.
    
Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

Signed-off-by: Philippe Bergheaud <felix@linux.vnet.ibm.com>
Acked-by: Torsten Duwe <duwe@suse.de>
---
 arch/powerpc/kernel/reloc_64.S |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/reloc_64.S b/arch/powerpc/kernel/reloc_64.S
index b47a0e1..1482327 100644
--- a/arch/powerpc/kernel/reloc_64.S
+++ b/arch/powerpc/kernel/reloc_64.S
@@ -69,8 +69,8 @@ _GLOBAL(relocate)
 	 * R_PPC64_RELATIVE ones.
 	 */
 	mtctr	r8
-5:	lwz	r0,12(9)	/* ELF64_R_TYPE(reloc->r_info) */
-	cmpwi	r0,R_PPC64_RELATIVE
+5:	ld	r0,8(9)		/* ELF64_R_TYPE(reloc->r_info) */
+	cmpdi	r0,R_PPC64_RELATIVE
 	bne	6f
 	ld	r6,0(r9)	/* reloc->r_offset */
 	ld	r0,16(r9)	/* reloc->r_addend */
-- 
1.7.10.4

