aboutsummaryrefslogtreecommitdiff
path: root/net/hsr
diff options
context:
space:
mode:
authorGravatar Christophe Leroy <christophe.leroy@csgroup.eu> 2022-03-14 12:49:36 +0100
committerGravatar Peter Zijlstra <peterz@infradead.org> 2022-04-05 09:59:38 +0200
commit8fd4ddda2f49a66bf5dd3d0c01966c4b1971308b (patch)
treeed31904efc09c25722b30768f54e11c026dad4bd /net/hsr
parentx86,static_call: Fix __static_call_return0 for i386 (diff)
downloadlinux-8fd4ddda2f49a66bf5dd3d0c01966c4b1971308b.tar.gz
linux-8fd4ddda2f49a66bf5dd3d0c01966c4b1971308b.tar.bz2
linux-8fd4ddda2f49a66bf5dd3d0c01966c4b1971308b.zip
static_call: Don't make __static_call_return0 static
System.map shows that vmlinux contains several instances of __static_call_return0(): c0004fc0 t __static_call_return0 c0011518 t __static_call_return0 c00d8160 t __static_call_return0 arch_static_call_transform() uses the middle one to check whether we are setting a call to __static_call_return0 or not: c0011520 <arch_static_call_transform>: c0011520: 3d 20 c0 01 lis r9,-16383 <== r9 = 0xc001 << 16 c0011524: 39 29 15 18 addi r9,r9,5400 <== r9 += 0x1518 c0011528: 7c 05 48 00 cmpw r5,r9 <== r9 has value 0xc0011518 here So if static_call_update() is called with one of the other instances of __static_call_return0(), arch_static_call_transform() won't recognise it. In order to work properly, global single instance of __static_call_return0() is required. Fixes: 3f2a8fc4b15d ("static_call/x86: Add __static_call_return0()") Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Link: https://lkml.kernel.org/r/30821468a0e7d28251954b578e5051dc09300d04.1647258493.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'net/hsr')
0 files changed, 0 insertions, 0 deletions