Projects
Factory:RISC-V:Base
libbpf
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
_service:tar_scm:libbpf.spec
Changed
@@ -4,7 +4,7 @@ Name: %{githubname} Version: %{githubver} -Release: 2 +Release: 3 Summary: Libbpf library License: LGPLv2 or BSD @@ -13,7 +13,9 @@ BuildRequires: gcc elfutils-libelf-devel elfutils-devel Patch0000: backport-libbpf-Fix-determine_ptr_size-guessing.patch - +Patch0001: backport-libbpf-preserve-errno-across-pr_warn-pr_info-pr_debug.patch +Patch0002: backport-libbpf-Ensure-functions-with-always_inline-attribute-are-inline.patch +Patch0003: backport-libbpf-Fix-the-name-of-a-reused-map.patch # This package supersedes libbpf from kernel-tools, # which has default Epoch: 0. By having Epoch: 1 # this libbpf will take over smoothly @@ -65,6 +67,11 @@ %{_libdir}/libbpf.a %changelog +* Fri Jan 6 2023 zhangmingyi<zhangmingyi5@huawei.com> - 2:0.8.1-3 +-- backporting: backport-libbpf-Ensure-functions-with-always_inline-attribute-are-inline.patch + backport-libbpf-Fix-the-name-of-a-reused-map.patch + backport-libbpf-preserve-errno-across-pr_warn-pr_info-pr_debug.patch + * Fri Dec 2 2022 zhangmingyi<zhangmingyi5@huawei.com> - 2:0.8.1-2 - update libbpf.spec source
View file
_service:tar_scm:backport-libbpf-Ensure-functions-with-always_inline-attribute-are-inline.patch
Added
@@ -0,0 +1,82 @@ +From 69d537ba0b5cd736cd5081d84928f4393856d3db Mon Sep 17 00:00:00 2001 +From: James Hilliard <james.hilliard1@gmail.com> +Date: Wed, 3 Aug 2022 09:14:03 -0600 +Subject: PATCH libbpf: Ensure functions with always_inline attribute are inline +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +GCC expects the always_inline attribute to only be set on inline +functions, as such we should make all functions with this attribute +use the __always_inline macro which makes the function inline and +sets the attribute. + +Fixes errors like: +/home/buildroot/bpf-next/tools/testing/selftests/bpf/tools/include/bpf/bpf_tracing.h:439:1: error: ‘always_inline’ function might not be inlinable -Werror=attributes + 439 | ____##name(unsigned long long *ctx, ##args) + | ^~~~ + +Signed-off-by: James Hilliard <james.hilliard1@gmail.com> +Signed-off-by: Andrii Nakryiko <andrii@kernel.org> +Acked-by: Jiri Olsa <jolsa@kernel.org> +Link: https://lore.kernel.org/bpf/20220803151403.793024-1-james.hilliard1@gmail.com + +Conflict: remove the modify of src/usdt.bpf.h because the include file +src/usdt.bpf.h is not exist in current version +Reference: https://github.com/libbpf/libbpf/commit/69d537ba0b5cd736cd5081d84928f4393856d3db +--- + src/bpf_tracing.h | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/bpf_tracing.h b/src/bpf_tracing.h +index f9ef377..12c0bb5 100644 +--- a/src/bpf_tracing.h ++++ b/src/bpf_tracing.h +@@ -424,7 +424,7 @@ struct pt_regs; + */ + #define BPF_PROG(name, args...) \ + name(unsigned long long *ctx); \ +-static __attribute__((always_inline)) typeof(name(0)) \ ++static __always_inline typeof(name(0)) \ + ____##name(unsigned long long *ctx, ##args); \ + typeof(name(0)) name(unsigned long long *ctx) \ + { \ +@@ -433,7 +433,7 @@ typeof(name(0)) name(unsigned long long *ctx) \ + return ____##name(___bpf_ctx_cast(args)); \ + _Pragma("GCC diagnostic pop") \ + } \ +-static __attribute__((always_inline)) typeof(name(0)) \ ++static __always_inline typeof(name(0)) \ + ____##name(unsigned long long *ctx, ##args) + + struct pt_regs; +@@ -458,7 +458,7 @@ struct pt_regs; + */ + #define BPF_KPROBE(name, args...) \ + name(struct pt_regs *ctx); \ +-static __attribute__((always_inline)) typeof(name(0)) \ ++static __always_inline typeof(name(0)) \ + ____##name(struct pt_regs *ctx, ##args); \ + typeof(name(0)) name(struct pt_regs *ctx) \ + { \ +@@ -467,7 +467,7 @@ typeof(name(0)) name(struct pt_regs *ctx) \ + return ____##name(___bpf_kprobe_args(args)); \ + _Pragma("GCC diagnostic pop") \ + } \ +-static __attribute__((always_inline)) typeof(name(0)) \ ++static __always_inline typeof(name(0)) \ + ____##name(struct pt_regs *ctx, ##args) + + #define ___bpf_kretprobe_args0() ctx +@@ -482,7 +482,7 @@ ____##name(struct pt_regs *ctx, ##args) + */ + #define BPF_KRETPROBE(name, args...) \ + name(struct pt_regs *ctx); \ +-static __attribute__((always_inline)) typeof(name(0)) \ ++static __always_inline typeof(name(0)) \ + ____##name(struct pt_regs *ctx, ##args); \ + typeof(name(0)) name(struct pt_regs *ctx) \ + { \ +-- +2.33.0 +
View file
_service:tar_scm:backport-libbpf-Fix-the-name-of-a-reused-map.patch
Added
@@ -0,0 +1,66 @@ +From 9b6f4eb1570c219474f6029caea71584d7a2188a Mon Sep 17 00:00:00 2001 +From: Anquan Wu <leiqi96@hotmail.com> +Date: Tue, 12 Jul 2022 11:15:40 +0800 +Subject: PATCH libbpf: Fix the name of a reused map +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +BPF map name is limited to BPF_OBJ_NAME_LEN. +A map name is defined as being longer than BPF_OBJ_NAME_LEN, +it will be truncated to BPF_OBJ_NAME_LEN when a userspace program +calls libbpf to create the map. A pinned map also generates a path +in the /sys. If the previous program wanted to reuse the map, +it can not get bpf_map by name, because the name of the map is only +partially the same as the name which get from pinned path. + +The syscall information below show that map name "process_pinned_map" +is truncated to "process_pinned_". + + bpf(BPF_OBJ_GET, {pathname="/sys/fs/bpf/process_pinned_map", + bpf_fd=0, file_flags=0}, 144) = -1 ENOENT (No such file or directory) + + bpf(BPF_MAP_CREATE, {map_type=BPF_MAP_TYPE_HASH, key_size=4, + value_size=4,max_entries=1024, map_flags=0, inner_map_fd=0, + map_name="process_pinned_",map_ifindex=0, btf_fd=3, btf_key_type_id=6, + btf_value_type_id=10,btf_vmlinux_value_type_id=0}, 72) = 4 + +This patch check that if the name of pinned map are the same as the +actual name for the first (BPF_OBJ_NAME_LEN - 1), +bpf map still uses the name which is included in bpf object. + +Fixes: 26736eb9a483 ("tools: libbpf: allow map reuse") +Signed-off-by: Anquan Wu <leiqi96@hotmail.com> +Signed-off-by: Andrii Nakryiko <andrii@kernel.org> +Link: https://lore.kernel.org/bpf/OSZP286MB1725CEA1C95C5CB8E7CCC53FB8869@OSZP286MB1725.JPNP286.PROD.OUTLOOK.COM +--- + src/libbpf.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/libbpf.c b/src/libbpf.c +index 72548798..68da1aca 100644 +--- a/src/libbpf.c ++++ b/src/libbpf.c +@@ -4327,7 +4327,7 @@ int bpf_map__set_autocreate(struct bpf_map *map, bool autocreate) + int bpf_map__reuse_fd(struct bpf_map *map, int fd) + { + struct bpf_map_info info = {}; +- __u32 len = sizeof(info); ++ __u32 len = sizeof(info), name_len; + int new_fd, err; + char *new_name; + +@@ -4337,7 +4337,12 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd) + if (err) + return libbpf_err(err); + +- new_name = strdup(info.name); ++ name_len = strlen(info.name); ++ if (name_len == BPF_OBJ_NAME_LEN - 1 && strncmp(map->name, info.name, name_len) == 0) ++ new_name = strdup(map->name); ++ else ++ new_name = strdup(info.name); ++ + if (!new_name) + return libbpf_err(-errno); +
View file
_service:tar_scm:backport-libbpf-preserve-errno-across-pr_warn-pr_info-pr_debug.patch
Added
@@ -0,0 +1,52 @@ +From 45dca19bd2f3fff624f03e903be9241af7cb26c6 Mon Sep 17 00:00:00 2001 +From: Andrii Nakryiko <andrii@kernel.org> +Date: Wed, 10 Aug 2022 11:34:25 -0700 +Subject: PATCH libbpf: preserve errno across pr_warn/pr_info/pr_debug +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +As suggested in 0, make sure that libbpf_print saves and restored +errno and as such guaranteed that no matter what actual print callback +user installs, macros like pr_warn/pr_info/pr_debug are completely +transparent as far as errno goes. + +While libbpf code is pretty careful about not clobbering important errno +values accidentally with pr_warn(), it's a trivial change to make sure +that pr_warn can be used anywhere without a risk of clobbering errno. + +No functional changes, just future proofing. + + 0 https://github.com/libbpf/libbpf/pull/536 + +Signed-off-by: Andrii Nakryiko <andrii@kernel.org> +Acked-by: Daniel Müller <deso@posteo.net> +Link: https://lore.kernel.org/r/20220810183425.1998735-1-andrii@kernel.org +Signed-off-by: Alexei Starovoitov <ast@kernel.org> +--- + src/libbpf.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/libbpf.c b/src/libbpf.c +index f7364ea8..917d975b 100644 +--- a/src/libbpf.c ++++ b/src/libbpf.c +@@ -95,13 +95,18 @@ __printf(2, 3) + void libbpf_print(enum libbpf_print_level level, const char *format, ...) + { + va_list args; ++ int old_errno; + + if (!__libbpf_pr) + return; + ++ old_errno = errno; ++ + va_start(args, format); + __libbpf_pr(level, format, args); + va_end(args); ++ ++ errno = old_errno; + } + + static void pr_perm_msg(int err)
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2