Message ID | 20230523194930.2116181-1-arnd@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | [1/2,v2] bpf: hide unused bpf_patch_call_args | expand |
On 5/23/23 12:43 PM, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > This function has no callers and no declaration when CONFIG_BPF_JIT_ALWAYS_ON > is enabled: > > kernel/bpf/core.c:2075:6: error: no previous prototype for 'bpf_patch_call_args' [-Werror=missing-prototypes] If CONFIG_BPF_JIT_ALWAYS_ON is enabled, the definition of bpf_patch_call_args should be invisible. Maybe I missed something. Could you list *ALL& bpf related config options in your setup so people can reproduce you above error messages? > > Hide the definition as well. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > v2: change indentation to align arguments better. Still not great > as the line is just too long > --- > kernel/bpf/core.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c > index 7421487422d4..0926714641eb 100644 > --- a/kernel/bpf/core.c > +++ b/kernel/bpf/core.c > @@ -2064,14 +2064,16 @@ EVAL4(PROG_NAME_LIST, 416, 448, 480, 512) > }; > #undef PROG_NAME_LIST > #define PROG_NAME_LIST(stack_size) PROG_NAME_ARGS(stack_size), > -static u64 (*interpreters_args[])(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5, > - const struct bpf_insn *insn) = { > +static __maybe_unused > +u64 (*interpreters_args[])(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5, > + const struct bpf_insn *insn) = { > EVAL6(PROG_NAME_LIST, 32, 64, 96, 128, 160, 192) > EVAL6(PROG_NAME_LIST, 224, 256, 288, 320, 352, 384) > EVAL4(PROG_NAME_LIST, 416, 448, 480, 512) > }; > #undef PROG_NAME_LIST > > +#ifdef CONFIG_BPF_SYSCALL > void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth) > { > stack_depth = max_t(u32, stack_depth, 1); > @@ -2080,6 +2082,7 @@ void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth) > __bpf_call_base_args; > insn->code = BPF_JMP | BPF_CALL_ARGS; > } > +#endif > > #else > static unsigned int __bpf_prog_ret0_warn(const void *ctx,
On Wed, May 24, 2023, at 05:05, Yonghong Song wrote: > On 5/23/23 12:43 PM, Arnd Bergmann wrote: >> From: Arnd Bergmann <arnd@arndb.de> >> >> This function has no callers and no declaration when CONFIG_BPF_JIT_ALWAYS_ON >> is enabled: >> >> kernel/bpf/core.c:2075:6: error: no previous prototype for 'bpf_patch_call_args' [-Werror=missing-prototypes] > > If CONFIG_BPF_JIT_ALWAYS_ON is enabled, the definition of > bpf_patch_call_args should be invisible. Maybe I missed something. > Could you list *ALL& bpf related config options in your setup > so people can reproduce you above error messages? Sorry, my mistake. I've reworded the changelog now to fix this: | This function is only used when CONFIG_BPF_JIT_ALWAYS_ON is disabled, | but CONFIG_BPF_SYSCALL is enabled. When both are turned off, the | prototype is missing but the unused function is still compiled, | as seen from this W=1 warning: | | kernel/bpf/core.c:2075:6: error: no previous prototype for 'bpf_patch_call_args' [-Werror=missing-prototypes] | | Add a matching #ifdef for the definition to leave it out. If this makes sense now, I'll send out a v3. Arnd
On 5/24/23 6:23 AM, Arnd Bergmann wrote: > On Wed, May 24, 2023, at 05:05, Yonghong Song wrote: >> On 5/23/23 12:43 PM, Arnd Bergmann wrote: >>> From: Arnd Bergmann <arnd@arndb.de> >>> >>> This function has no callers and no declaration when CONFIG_BPF_JIT_ALWAYS_ON >>> is enabled: >>> >>> kernel/bpf/core.c:2075:6: error: no previous prototype for 'bpf_patch_call_args' [-Werror=missing-prototypes] >> >> If CONFIG_BPF_JIT_ALWAYS_ON is enabled, the definition of >> bpf_patch_call_args should be invisible. Maybe I missed something. >> Could you list *ALL& bpf related config options in your setup >> so people can reproduce you above error messages? > > Sorry, my mistake. I've reworded the changelog now to fix this: > > | This function is only used when CONFIG_BPF_JIT_ALWAYS_ON is disabled, > | but CONFIG_BPF_SYSCALL is enabled. When both are turned off, the > | prototype is missing but the unused function is still compiled, > | as seen from this W=1 warning: > | > | kernel/bpf/core.c:2075:6: error: no previous prototype for 'bpf_patch_call_args' [-Werror=missing-prototypes] > | > | Add a matching #ifdef for the definition to leave it out. > > If this makes sense now, I'll send out a v3. Yes, the above new commit message sounds good to me. Thanks. > > Arnd
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 7421487422d4..0926714641eb 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -2064,14 +2064,16 @@ EVAL4(PROG_NAME_LIST, 416, 448, 480, 512) }; #undef PROG_NAME_LIST #define PROG_NAME_LIST(stack_size) PROG_NAME_ARGS(stack_size), -static u64 (*interpreters_args[])(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5, - const struct bpf_insn *insn) = { +static __maybe_unused +u64 (*interpreters_args[])(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5, + const struct bpf_insn *insn) = { EVAL6(PROG_NAME_LIST, 32, 64, 96, 128, 160, 192) EVAL6(PROG_NAME_LIST, 224, 256, 288, 320, 352, 384) EVAL4(PROG_NAME_LIST, 416, 448, 480, 512) }; #undef PROG_NAME_LIST +#ifdef CONFIG_BPF_SYSCALL void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth) { stack_depth = max_t(u32, stack_depth, 1); @@ -2080,6 +2082,7 @@ void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth) __bpf_call_base_args; insn->code = BPF_JMP | BPF_CALL_ARGS; } +#endif #else static unsigned int __bpf_prog_ret0_warn(const void *ctx,