Re: [PATCH] libbpf: Wrap libbpf API direct err with libbpf_err

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



在 2025/2/19 10:08, Eduard Zingerman 写道:
On Fri, 2025-02-14 at 22:17 +0800, Tao Chen wrote:
Just wrap the direct err with libbpf_err, keep consistency
with other APIs.

Signed-off-by: Tao Chen <chen.dylane@xxxxxxxxx>
---

While at it, I've noticed two more places that need libbpf_err() calls.
Could you please check the following locations:

bpf_map__set_value_size:
   return -EOPNOTSUPP;       tools/lib/bpf/libbpf.c:10309
   return err;               tools/lib/bpf/libbpf.c:10317

Will change it. Thanks


?

Other than that, I agree with changes in this patch.

Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx>

[...]


I use a simple script, other places may also should be added:

9727 line: return NUL; (API:libbpf_bpf_attach_type_str)
9735 line: return NULL; (API: libbpf_bpf_link_type_str)
9743 line: return NULL; (API: libbpf_bpf_map_type_str)
9751 line: return NULL; (API: libbpf_bpf_prog_type_str)
10151 line: return NULL; (API: bpf_map__name)
10458 line: return NULL; (API: bpf_object__prev_map)

-----------------------------------------------
#!/bin/python3
import re

LIBBPF_PATH="tools/lib/bpf/"

def process_functions(file_path, target_functions):
    """
    find return err fix
    Args:
        file_path: like libbpf.c btf.c etc.
        target_functions: libbpf APIS
    """
    with open(file_path, 'r') as file:
        lines = file.readlines()

function_info = {func: {'start': None, 'end': None, 'code': []} for func in target_functions}

    in_target_function = False
    current_function = None

    for i, line in enumerate(lines):
        # check the start line
        for func in target_functions:
            if re.search(re.escape(func) + r'\s*\(', line):
                if ' __' in line:
                    continue
                if '=' in line:
                    continue
                if 'if' in line:
                    continue
                if ';' in line:
                    continue
                if '*' in func:
                    continue
                in_target_function = True
                current_function = func
                function_info[func]['start'] = i
                function_info[func]['code'].append(line)
                break

        # check return err in target function
        if in_target_function and current_function:
            function_info[current_function]['code'].append(line)
            if re.search(r'\breturn\b', line):
                # check return
if not re.search(r'\breturn\s+0\b', line): # return 0 ignore
                    if not re.search(r'libbpf_err|libbpf_ptr', line):
print(f"code should fix at {i + 1} line: {line.strip()} (API: {current_function})")

            # check function end line
            if re.search(r'}', line):
                function_info[current_function]['end'] = i
                in_target_function = False
                current_function = None  # Reset for the next function


def extract_libbpf_apis(map_file):
    """
    extract APIS from libbpf.map
    Args:
        map_file (str): libbpf.map。
    Returns:
        list: libbpf APIs。
    """
    functions = []
    inside_global_section = False

    with open(map_file, 'r') as f:
        for line in f:
            line = line.strip()
            if ';' in line and 'LIBBPF' not in line:
                functions.append(line.replace(';',''))

    return functions

map_file = "tools/lib/bpf/libbpf.map"
input_files = ["libbpf.c",
               "btf.c",
               "bpf_prog_linfo.c",
               "btf_dump.c",
               "btf_iter.c",
               "btf_relocate.c",
               "elf.c",
               "features.c",
               "gen_loader.c",
               "hashmap.c",
               "libbpf_probes.c",
               "linker.c",
               "netlink.c",
               "nlattr.c",
               "relo_core.c",
               "usdt.c",
               "zip.c",
               "str_error.c",
               "strset.c"]

target_functions = extract_libbpf_apis(map_file)
print(f"Target functions extracted: {target_functions}")

for input_file in input_files:
    print(f"===========check file:{input_file}=============")
    process_functions(LIBBPF_PATH + input_file, target_functions)

--
Best Regards
Dylane Chen




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux