From: Steven Rostedt Date: Sat, 7 Feb 2009 20:22:40 +0000 (+0000) Subject: powerpc/ftrace: Fix math to calculate offset in TOC X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=f25f9074c24f1451a74942c4bc089bb53e47f462;p=linux-beck.git powerpc/ftrace: Fix math to calculate offset in TOC Impact: fix dynamic ftrace with large modules in PPC64 The math to calculate the offset into the TOC that is taken from reading the trampoline is incorrect. The bottom half of the offset is a signed extended short. The current code was using an OR to create the offset when it should have been using an addition. Signed-off-by: Steven Rostedt Acked-by: Geoff Levand Signed-off-by: Benjamin Herrenschmidt --- diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c index 5355244c99ff..60c60ccf5e3c 100644 --- a/arch/powerpc/kernel/ftrace.c +++ b/arch/powerpc/kernel/ftrace.c @@ -195,8 +195,9 @@ __ftrace_make_nop(struct module *mod, return -EINVAL; } - offset = (unsigned)((unsigned short)jmp[0]) << 16 | - (unsigned)((unsigned short)jmp[1]); + /* The bottom half is signed extended */ + offset = ((unsigned)((unsigned short)jmp[0]) << 16) + + (int)((short)jmp[1]); DEBUGP(" %x ", offset);