* [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation
@ 2024-01-17 13:06 Andrey Grafin
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Andrey Grafin @ 2024-01-17 13:06 UTC (permalink / raw)
To: bpf; +Cc: andrii
This patch allows to auto create BPF_MAP_TYPE_ARRAY_OF_MAPS and
BPF_MAP_TYPE_HASH_OF_MAPS with values of BPF_MAP_TYPE_PERF_EVENT_ARRAY
by bpf_object__load().
Previous behaviour created a zero filled btf_map_def for inner maps and
tried to use it for a map creation but the linux kernel forbids to create
a BPF_MAP_TYPE_PERF_EVENT_ARRAY map with max_entries=0.
Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
---
tools/lib/bpf/libbpf.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index e067be95da3c..8f4d580187aa 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -70,6 +70,7 @@
static struct bpf_map *bpf_object__add_map(struct bpf_object *obj);
static bool prog_is_subprog(const struct bpf_object *obj, const struct bpf_program *prog);
+static int map_set_def_max_entries(struct bpf_map *map);
static const char * const attach_type_name[] = {
[BPF_CGROUP_INET_INGRESS] = "cgroup_inet_ingress",
@@ -5212,6 +5213,9 @@ static int bpf_object__create_map(struct bpf_object *obj, struct bpf_map *map, b
if (bpf_map_type__is_map_in_map(def->type)) {
if (map->inner_map) {
+ err = map_set_def_max_entries(map->inner_map);
+ if (err)
+ return err;
err = bpf_object__create_map(obj, map->inner_map, true);
if (err) {
pr_warn("map '%s': failed to create inner map: %d\n",
--
2.41.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values
2024-01-17 13:06 [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Andrey Grafin
@ 2024-01-17 13:06 ` Andrey Grafin
2024-01-17 16:53 ` Yonghong Song
2024-01-18 1:14 ` Hou Tao
2024-01-17 16:52 ` [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Yonghong Song
` (2 subsequent siblings)
3 siblings, 2 replies; 7+ messages in thread
From: Andrey Grafin @ 2024-01-17 13:06 UTC (permalink / raw)
To: bpf; +Cc: andrii
Check that bpf_object__load() successfully creates map_in_maps
with BPF_MAP_TYPE_PERF_EVENT_ARRAY values.
These changes cover fix in the previous patch
"libbpf: Apply map_set_def_max_entries() for inner_maps on creation".
A command line output is:
- w/o fix
$ sudo ./test_maps
libbpf: map 'mim_array_pe': failed to create inner map: -22
libbpf: map 'mim_array_pe': failed to create: Invalid argument(-22)
libbpf: failed to load object './test_map_in_map.bpf.o'
Failed to load test prog
- with fix
$ sudo ./test_maps
...
test_maps: OK, 0 SKIPPED
Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
---
.../selftests/bpf/progs/test_map_in_map.c | 26 +++++++++++++++++++
tools/testing/selftests/bpf/test_maps.c | 6 ++++-
2 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/progs/test_map_in_map.c b/tools/testing/selftests/bpf/progs/test_map_in_map.c
index f416032ba858..b295f9b721bf 100644
--- a/tools/testing/selftests/bpf/progs/test_map_in_map.c
+++ b/tools/testing/selftests/bpf/progs/test_map_in_map.c
@@ -21,6 +21,32 @@ struct {
__type(value, __u32);
} mim_hash SEC(".maps");
+/* The following three maps are used to test
+ * perf_event_array map can be an inner
+ * map of hash/array_of_maps.
+ */
+struct perf_event_array {
+ __uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
+ __type(key, __u32);
+ __type(value, __u32);
+} inner_map0 SEC(".maps");
+
+struct {
+ __uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS);
+ __uint(max_entries, 1);
+ __type(key, __u32);
+ __array(values, struct perf_event_array);
+} mim_array_pe SEC(".maps") = {
+ .values = {&inner_map0}};
+
+struct {
+ __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);
+ __uint(max_entries, 1);
+ __type(key, __u32);
+ __array(values, struct perf_event_array);
+} mim_hash_pe SEC(".maps") = {
+ .values = {&inner_map0}};
+
SEC("xdp")
int xdp_mimtest0(struct xdp_md *ctx)
{
diff --git a/tools/testing/selftests/bpf/test_maps.c b/tools/testing/selftests/bpf/test_maps.c
index 7fc00e423e4d..e0dd101c9f2b 100644
--- a/tools/testing/selftests/bpf/test_maps.c
+++ b/tools/testing/selftests/bpf/test_maps.c
@@ -1190,7 +1190,11 @@ static void test_map_in_map(void)
goto out_map_in_map;
}
- bpf_object__load(obj);
+ err = bpf_object__load(obj);
+ if (err) {
+ printf("Failed to load test prog\n");
+ goto out_map_in_map;
+ }
map = bpf_object__find_map_by_name(obj, "mim_array");
if (!map) {
--
2.41.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
@ 2024-01-17 16:53 ` Yonghong Song
2024-01-18 1:14 ` Hou Tao
1 sibling, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2024-01-17 16:53 UTC (permalink / raw)
To: Andrey Grafin, bpf; +Cc: andrii
On 1/17/24 5:06 AM, Andrey Grafin wrote:
> Check that bpf_object__load() successfully creates map_in_maps
> with BPF_MAP_TYPE_PERF_EVENT_ARRAY values.
> These changes cover fix in the previous patch
> "libbpf: Apply map_set_def_max_entries() for inner_maps on creation".
>
> A command line output is:
> - w/o fix
> $ sudo ./test_maps
> libbpf: map 'mim_array_pe': failed to create inner map: -22
> libbpf: map 'mim_array_pe': failed to create: Invalid argument(-22)
> libbpf: failed to load object './test_map_in_map.bpf.o'
> Failed to load test prog
>
> - with fix
> $ sudo ./test_maps
> ...
> test_maps: OK, 0 SKIPPED
>
> Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
> Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
2024-01-17 16:53 ` Yonghong Song
@ 2024-01-18 1:14 ` Hou Tao
1 sibling, 0 replies; 7+ messages in thread
From: Hou Tao @ 2024-01-18 1:14 UTC (permalink / raw)
To: Andrey Grafin, bpf; +Cc: andrii
On 1/17/2024 9:06 PM, Andrey Grafin wrote:
> Check that bpf_object__load() successfully creates map_in_maps
> with BPF_MAP_TYPE_PERF_EVENT_ARRAY values.
> These changes cover fix in the previous patch
> "libbpf: Apply map_set_def_max_entries() for inner_maps on creation".
>
> A command line output is:
> - w/o fix
> $ sudo ./test_maps
> libbpf: map 'mim_array_pe': failed to create inner map: -22
> libbpf: map 'mim_array_pe': failed to create: Invalid argument(-22)
> libbpf: failed to load object './test_map_in_map.bpf.o'
> Failed to load test prog
>
> - with fix
> $ sudo ./test_maps
> ...
> test_maps: OK, 0 SKIPPED
>
> Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
> Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
Acked-by: Hou Tao <houtao1@huawei.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation
2024-01-17 13:06 [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Andrey Grafin
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
@ 2024-01-17 16:52 ` Yonghong Song
2024-01-18 1:12 ` Hou Tao
2024-01-19 21:30 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2024-01-17 16:52 UTC (permalink / raw)
To: Andrey Grafin, bpf; +Cc: andrii
On 1/17/24 5:06 AM, Andrey Grafin wrote:
> This patch allows to auto create BPF_MAP_TYPE_ARRAY_OF_MAPS and
> BPF_MAP_TYPE_HASH_OF_MAPS with values of BPF_MAP_TYPE_PERF_EVENT_ARRAY
> by bpf_object__load().
>
> Previous behaviour created a zero filled btf_map_def for inner maps and
> tried to use it for a map creation but the linux kernel forbids to create
> a BPF_MAP_TYPE_PERF_EVENT_ARRAY map with max_entries=0.
>
> Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
> Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
If the previous patch has been ack'ed, and the current version
is the same or only has minor change compared to previous version,
you can carry previous Ack. This will save maintainer and reviewer's
time.
Acked-by: Yonghong Song <yonghong.song@linux.dev>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation
2024-01-17 13:06 [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Andrey Grafin
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
2024-01-17 16:52 ` [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Yonghong Song
@ 2024-01-18 1:12 ` Hou Tao
2024-01-19 21:30 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 7+ messages in thread
From: Hou Tao @ 2024-01-18 1:12 UTC (permalink / raw)
To: Andrey Grafin, bpf; +Cc: andrii
On 1/17/2024 9:06 PM, Andrey Grafin wrote:
> This patch allows to auto create BPF_MAP_TYPE_ARRAY_OF_MAPS and
> BPF_MAP_TYPE_HASH_OF_MAPS with values of BPF_MAP_TYPE_PERF_EVENT_ARRAY
> by bpf_object__load().
>
> Previous behaviour created a zero filled btf_map_def for inner maps and
> tried to use it for a map creation but the linux kernel forbids to create
> a BPF_MAP_TYPE_PERF_EVENT_ARRAY map with max_entries=0.
>
> Fixes: 646f02ffdd49 ("libbpf: Add BTF-defined map-in-map support")
> Signed-off-by: Andrey Grafin <conquistador@yandex-team.ru>
Acked-by: Hou Tao <houtao1@huawei.com>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation
2024-01-17 13:06 [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Andrey Grafin
` (2 preceding siblings ...)
2024-01-18 1:12 ` Hou Tao
@ 2024-01-19 21:30 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 7+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-01-19 21:30 UTC (permalink / raw)
To: Andrey Grafin; +Cc: bpf, andrii
Hello:
This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Wed, 17 Jan 2024 16:06:18 +0300 you wrote:
> This patch allows to auto create BPF_MAP_TYPE_ARRAY_OF_MAPS and
> BPF_MAP_TYPE_HASH_OF_MAPS with values of BPF_MAP_TYPE_PERF_EVENT_ARRAY
> by bpf_object__load().
>
> Previous behaviour created a zero filled btf_map_def for inner maps and
> tried to use it for a map creation but the linux kernel forbids to create
> a BPF_MAP_TYPE_PERF_EVENT_ARRAY map with max_entries=0.
>
> [...]
Here is the summary with links:
- [bpf,v5,1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation
https://git.kernel.org/bpf/bpf-next/c/683ed8edd0c7
- [bpf,v5,2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values
https://git.kernel.org/bpf/bpf-next/c/9d1a26e7e43c
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-01-19 21:30 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-17 13:06 [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Andrey Grafin
2024-01-17 13:06 ` [PATCH bpf v5 2/2] selftest/bpf: Add map_in_maps with BPF_MAP_TYPE_PERF_EVENT_ARRAY values Andrey Grafin
2024-01-17 16:53 ` Yonghong Song
2024-01-18 1:14 ` Hou Tao
2024-01-17 16:52 ` [PATCH bpf v5 1/2] libbpf: Apply map_set_def_max_entries() for inner_maps on creation Yonghong Song
2024-01-18 1:12 ` Hou Tao
2024-01-19 21:30 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox