From: Anton Blanchard <anton@samba.org>
Subject: powerpc/perf: Use perf_instruction_pointer in callchains
Git-commit: 6da7094810df5408e32528024cb783f920c87a2c
Patch-mainline: yes
References: bnc#796891 
	    
    We use SIAR or regs->nip for the instruction pointer depending on
    the PMU configuration, but we always use regs->nip in the callchain.
    
    Use perf_instruction_pointer so the backtrace is consistent.
	    
Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Acked-by: Torsten Duwe <duwe@suse.de>

Index: linux-3.0.53-83/arch/powerpc/kernel/perf_callchain.c
===================================================================
--- linux-3.0.53-83.orig/arch/powerpc/kernel/perf_callchain.c
+++ linux-3.0.53-83/arch/powerpc/kernel/perf_callchain.c
@@ -57,7 +57,7 @@ perf_callchain_kernel(struct perf_callch
 
 	lr = regs->link;
 	sp = regs->gpr[1];
-	perf_callchain_store(entry, regs->nip);
+	perf_callchain_store(entry, perf_instruction_pointer(regs));
 
 	if (!validate_sp(sp, current, STACK_FRAME_OVERHEAD))
 		return;
@@ -230,7 +230,7 @@ static void perf_callchain_user_64(struc
 	struct signal_frame_64 __user *sigframe;
 	unsigned long __user *fp, *uregs;
 
-	next_ip = regs->nip;
+	next_ip = perf_instruction_pointer(regs);
 	lr = regs->link;
 	sp = regs->gpr[1];
 	perf_callchain_store(entry, next_ip);
@@ -430,7 +430,7 @@ static void perf_callchain_user_32(struc
 	long level = 0;
 	unsigned int __user *fp, *uregs;
 
-	next_ip = regs->nip;
+	next_ip = perf_instruction_pointer(regs);
 	lr = regs->link;
 	sp = regs->gpr[1];
 	perf_callchain_store(entry, next_ip);
