!60 libbpf例行补丁回合
From: @zhang-mingyi66 Reviewed-by: @bitcoffee, @nlgwcy Signed-off-by: @nlgwcy
This commit is contained in:
commit
71727cebfd
@ -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
|
||||||
|
|
||||||
66
backport-libbpf-Fix-the-name-of-a-reused-map.patch
Normal file
66
backport-libbpf-Fix-the-name-of-a-reused-map.patch
Normal file
@ -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);
|
||||||
|
|
||||||
@ -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)
|
||||||
10
libbpf.spec
10
libbpf.spec
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Name: %{githubname}
|
Name: %{githubname}
|
||||||
Version: %{githubver}
|
Version: %{githubver}
|
||||||
Release: 2
|
Release: 3
|
||||||
Summary: Libbpf library
|
Summary: Libbpf library
|
||||||
|
|
||||||
License: LGPLv2 or BSD
|
License: LGPLv2 or BSD
|
||||||
@ -14,6 +14,9 @@ BuildRequires: gcc elfutils-libelf-devel elfutils-devel
|
|||||||
|
|
||||||
#patches
|
#patches
|
||||||
Patch0000: backport-libbpf-Fix-determine_ptr_size-guessing.patch
|
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,
|
# This package supersedes libbpf from kernel-tools,
|
||||||
# which has default Epoch: 0. By having Epoch: 1
|
# which has default Epoch: 0. By having Epoch: 1
|
||||||
@ -66,6 +69,11 @@ developing applications that use %{name}
|
|||||||
%{_libdir}/libbpf.a
|
%{_libdir}/libbpf.a
|
||||||
|
|
||||||
%changelog
|
%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
|
||||||
|
|
||||||
* Sat Nov 26 2022 zhangmingyi <zhangmingyi@huawei.com> -2:0.8.1-2
|
* Sat Nov 26 2022 zhangmingyi <zhangmingyi@huawei.com> -2:0.8.1-2
|
||||||
- libbpf.spec - modify Source address
|
- libbpf.spec - modify Source address
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user