In the next patch, it also needs to use the extended BPF syscall to
receive the reported log.

So, factor out __sys_bpf_fd helper.

No functional changes intended.

Signed-off-by: Leon Hwang <[email protected]>
---
 tools/lib/bpf/bpf.c | 41 +++++++++++++++++++++++++----------------
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index b49822d212ae..9a2107d4f6d8 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -203,6 +203,30 @@ 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 (!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(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 +235,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;
@@ -248,20 +270,7 @@ int bpf_map_create(enum bpf_map_type map_type,
        attr.excl_prog_hash_size = OPTS_GET(opts, excl_prog_hash_size, 0);
 
        log_opts = OPTS_GET(opts, log_opts, NULL);
-       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