Re: [PATCH v6 09/17] x86/static_call: Add out-of-line static call implementation

From: Steven Rostedt
Date: Fri Jul 10 2020 - 18:13:37 EST


On Fri, 10 Jul 2020 15:38:40 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:

> From: Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
>
> Add the x86 out-of-line static call implementation. For each key, a
> permanent trampoline is created which is the destination for all static
> calls for the given key. The trampoline has a direct jump which gets
> patched by static_call_update() when the destination function changes.

FYI, I get the following warnings after applying this patch.

/work/git/linux-test.git/arch/x86/kernel/static_call.c: In function â__static_call_transformâ:
/work/git/linux-test.git/arch/x86/kernel/static_call.c:9:43: warning: passing argument 2 of âtext_gen_insnâ makes pointer from integer without a cast [-Wint-conversion]
9 | const void *code = text_gen_insn(opcode, (long)insn, (long)func);
| ^~~~~~~~~~
| |
| long int
In file included from /work/git/linux-test.git/arch/x86/include/asm/static_call.h:5,
from /work/git/linux-test.git/include/linux/static_call.h:62,
from /work/git/linux-test.git/arch/x86/kernel/static_call.c:2:
/work/git/linux-test.git/arch/x86/include/asm/text-patching.h:95:44: note: expected âconst void *â but argument is of type âlong intâ
95 | void *text_gen_insn(u8 opcode, const void *addr, const void *dest)
| ~~~~~~~~~~~~^~~~
/work/git/linux-test.git/arch/x86/kernel/static_call.c:9:55: warning: passing argument 3 of âtext_gen_insnâ makes pointer from integer without a cast [-Wint-conversion]
9 | const void *code = text_gen_insn(opcode, (long)insn, (long)func);
| ^~~~~~~~~~
| |
| long int
In file included from /work/git/linux-test.git/arch/x86/include/asm/static_call.h:5,
from /work/git/linux-test.git/include/linux/static_call.h:62,
from /work/git/linux-test.git/arch/x86/kernel/static_call.c:2:
/work/git/linux-test.git/arch/x86/include/asm/text-patching.h:95:62: note: expected âconst void *â but argument is of type âlong intâ
95 | void *text_gen_insn(u8 opcode, const void *addr, const void *dest)


-- Steve