In the next patch, it also needs to use the extended BPF syscall to receive the reported log.
So, factor out __bpf_sys_fd helper. No functional changes intended. Signed-off-by: Leon Hwang <[email protected]> --- tools/lib/bpf/bpf.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index b49822d212ae..17e73e443bc7 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -203,6 +203,27 @@ int bump_rlimit_memlock(void) return 0; } +static int __sys_bpf_fd(union bpf_attr *attr, const size_t attr_sz, enum bpf_cmd cmd, + struct bpf_log_opts *log_opts) +{ + const size_t attr_common_sz = sizeof(struct bpf_common_attr); + struct bpf_common_attr attr_common; + int fd; + + if (log_opts && feat_supported(NULL, FEAT_BPF_SYSCALL_COMMON_ATTRS)) { + memset(&attr_common, 0, attr_common_sz); + attr_common.log_buf = ptr_to_u64(OPTS_GET(log_opts, buf, NULL)); + attr_common.log_size = OPTS_GET(log_opts, size, 0); + attr_common.log_level = OPTS_GET(log_opts, level, 0); + fd = sys_bpf_ext_fd(cmd, attr, attr_sz, &attr_common, attr_common_sz); + OPTS_SET(log_opts, true_size, attr_common.log_true_size); + } else { + fd = sys_bpf_fd(cmd, attr, attr_sz); + OPTS_SET(log_opts, true_size, 0); + } + return fd; +} + int bpf_map_create(enum bpf_map_type map_type, const char *map_name, __u32 key_size, @@ -211,8 +232,6 @@ int bpf_map_create(enum bpf_map_type map_type, const struct bpf_map_create_opts *opts) { const size_t attr_sz = offsetofend(union bpf_attr, excl_prog_hash_size); - const size_t attr_common_sz = sizeof(struct bpf_common_attr); - struct bpf_common_attr attr_common; struct bpf_log_opts *log_opts; union bpf_attr attr; int fd; @@ -251,17 +270,7 @@ int bpf_map_create(enum bpf_map_type map_type, if (!OPTS_VALID(log_opts, bpf_log_opts)) return libbpf_err(-EINVAL); - if (log_opts && feat_supported(NULL, FEAT_BPF_SYSCALL_COMMON_ATTRS)) { - memset(&attr_common, 0, attr_common_sz); - attr_common.log_buf = ptr_to_u64(OPTS_GET(log_opts, buf, NULL)); - attr_common.log_size = OPTS_GET(log_opts, size, 0); - attr_common.log_level = OPTS_GET(log_opts, level, 0); - fd = sys_bpf_ext_fd(BPF_MAP_CREATE, &attr, attr_sz, &attr_common, attr_common_sz); - OPTS_SET(log_opts, true_size, attr_common.log_true_size); - } else { - fd = sys_bpf_fd(BPF_MAP_CREATE, &attr, attr_sz); - OPTS_SET(log_opts, true_size, 0); - } + fd = __sys_bpf_fd(&attr, attr_sz, BPF_MAP_CREATE, log_opts); return libbpf_err_errno(fd); } -- 2.55.0
