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


Reply via email to