diff mbox series

[bpf] bpf: Limit static tcp-cc functions in the .BTF_ids list to x86

Message ID 20210508005011.3863757-1-kafai@fb.com (mailing list archive)
State Accepted
Commit 569c484f9995f489f2b80dd134269fe07d2b900d
Delegated to: BPF
Headers show
Series [bpf] bpf: Limit static tcp-cc functions in the .BTF_ids list to x86 | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for bpf
netdev/subject_prefix success Link
netdev/cc_maintainers fail 1 blamed authors not CCed: andrii@kernel.org; 9 maintainers not CCed: dsahern@kernel.org yhs@fb.com kpsingh@kernel.org yoshfuji@linux-ipv6.org andrii@kernel.org john.fastabend@gmail.com songliubraving@fb.com davem@davemloft.net kuba@kernel.org
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit success Errors and warnings before: 1 this patch: 1
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 14 lines checked
netdev/build_allmodconfig_warn success Errors and warnings before: 1 this patch: 1
netdev/header_inline success Link

Commit Message

Martin KaFai Lau May 8, 2021, 12:50 a.m. UTC
During the discussion in [0].  It was pointed out that static functions
in ppc64 is prefixed with ".".  For example, the 'readelf -s vmlinux.ppc':

89326: c000000001383280    24 NOTYPE  LOCAL  DEFAULT   31 cubictcp_init
89327: c000000000c97c50   168 FUNC    LOCAL  DEFAULT    2 .cubictcp_init

The one with FUNC type is ".cubictcp_init" instead of "cubictcp_init".
The "." seems to be done by arch/powerpc/include/asm/ppc_asm.h.

This caused the pahole cannot generate the BTF for these tcp-cc kernel
functions because pahole only captures the FUNC type and "cubictcp_init"
is not.  It then failed the kernel compilation in ppc64.

This behavior is only reported in ppc64 so far.  I tried arm64, s390,
and sparc64 and did not observe this "." prefix and NOTYPE behavior.

Since the kfunc call is only supported in the x86_64 and x86_32 jit,
this patch limits those tcp-cc functions to x86 only to avoid unnecessary
compilation issue in other ARCHs.  In the future, we can examine
if it is better to change all those functions from static to
extern.

[0]: https://lore.kernel.org/bpf/4e051459-8532-7b61-c815-f3435767f8a0@kernel.org/

Fixes: e78aea8b2170 ("bpf: tcp: Put some tcp cong functions in allowlist for bpf-tcp-cc")
Cc: Michal Suchánek <msuchanek@suse.de>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
---
 net/ipv4/bpf_tcp_ca.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

patchwork-bot+netdevbpf@kernel.org May 11, 2021, 9:30 p.m. UTC | #1
Hello:

This patch was applied to bpf/bpf.git (refs/heads/master):

On Fri, 7 May 2021 17:50:11 -0700 you wrote:
> During the discussion in [0].  It was pointed out that static functions
> in ppc64 is prefixed with ".".  For example, the 'readelf -s vmlinux.ppc':
> 
> 89326: c000000001383280    24 NOTYPE  LOCAL  DEFAULT   31 cubictcp_init
> 89327: c000000000c97c50   168 FUNC    LOCAL  DEFAULT    2 .cubictcp_init
> 
> The one with FUNC type is ".cubictcp_init" instead of "cubictcp_init".
> The "." seems to be done by arch/powerpc/include/asm/ppc_asm.h.
> 
> [...]

Here is the summary with links:
  - [bpf] bpf: Limit static tcp-cc functions in the .BTF_ids list to x86
    https://git.kernel.org/bpf/bpf/c/569c484f9995

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
diff mbox series

Patch

diff --git a/net/ipv4/bpf_tcp_ca.c b/net/ipv4/bpf_tcp_ca.c
index dff4f0eb96b0..9e41eff4a685 100644
--- a/net/ipv4/bpf_tcp_ca.c
+++ b/net/ipv4/bpf_tcp_ca.c
@@ -185,6 +185,7 @@  BTF_ID(func, tcp_reno_cong_avoid)
 BTF_ID(func, tcp_reno_undo_cwnd)
 BTF_ID(func, tcp_slow_start)
 BTF_ID(func, tcp_cong_avoid_ai)
+#ifdef CONFIG_X86
 #ifdef CONFIG_DYNAMIC_FTRACE
 #if IS_BUILTIN(CONFIG_TCP_CONG_CUBIC)
 BTF_ID(func, cubictcp_init)
@@ -213,6 +214,7 @@  BTF_ID(func, bbr_min_tso_segs)
 BTF_ID(func, bbr_set_state)
 #endif
 #endif  /* CONFIG_DYNAMIC_FTRACE */
+#endif	/* CONFIG_X86 */
 BTF_SET_END(bpf_tcp_ca_kfunc_ids)
 
 static bool bpf_tcp_ca_check_kfunc_call(u32 kfunc_btf_id)