backporting
This commit is contained in:
parent
7cb717a3d2
commit
5b632a3541
@ -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)
|
||||
11
libbpf.spec
11
libbpf.spec
@ -4,7 +4,7 @@
|
||||
|
||||
Name: %{githubname}
|
||||
Version: %{githubver}
|
||||
Release: 2
|
||||
Release: 3
|
||||
Summary: Libbpf library
|
||||
|
||||
License: LGPLv2 or BSD
|
||||
@ -13,7 +13,9 @@ Source: https://github.com/%{githubname}/%{githubname}/archive/refs/tags
|
||||
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 @@ developing applications that use %{name}
|
||||
%{_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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user