[PATCH bpf-next v2 1/5] bpf: make MAX_BPF_FUNC_ARGS 14

From: menglong8 . dong
Date: Fri Jun 02 2023 - 03:02:06 EST


From: Menglong Dong <imagedong@xxxxxxxxxxx>

According to the current kernel version, below is a statistics of the
function arguments count:

argument count | FUNC_PROTO count
7 | 367
8 | 196
9 | 71
10 | 43
11 | 22
12 | 10
13 | 15
14 | 4
15 | 0
16 | 1

It's hard to statisics the function count, so I use FUNC_PROTO in the btf
of vmlinux instead. The function with 16 arguments is ZSTD_buildCTable(),
which I think can be ignored.

Therefore, let's make the maximum of function arguments count 14. It used
to be 12, but it seems that there is no harm to make it big enough.

Reviewed-by: Jiang Biao <benbjiang@xxxxxxxxxxx>
Signed-off-by: Menglong Dong <imagedong@xxxxxxxxxxx>
---
include/linux/bpf.h | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index f58895830ada..8b997779faf7 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -961,10 +961,10 @@ enum bpf_cgroup_storage_type {

#define MAX_BPF_CGROUP_STORAGE_TYPE __BPF_CGROUP_STORAGE_MAX

-/* The longest tracepoint has 12 args.
- * See include/trace/bpf_probe.h
+/* The maximun number of the kernel function arguments.
+ * Let's make it 14, for now.
*/
-#define MAX_BPF_FUNC_ARGS 12
+#define MAX_BPF_FUNC_ARGS 14

/* The maximum number of arguments passed through registers
* a single function may have.
@@ -2273,7 +2273,8 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
static inline bool bpf_tracing_ctx_access(int off, int size,
enum bpf_access_type type)
{
- if (off < 0 || off >= sizeof(__u64) * MAX_BPF_FUNC_ARGS)
+ /* "+1" here is for FEXIT return value. */
+ if (off < 0 || off >= sizeof(__u64) * (MAX_BPF_FUNC_ARGS + 1))
return false;
if (type != BPF_READ)
return false;
--
2.40.1