summaryrefslogtreecommitdiffstats
path: root/samples/bpf/bpf_load.c
diff options
context:
space:
mode:
authorJesper Dangaard Brouer <brouer@redhat.com>2017-05-02 14:32:01 +0200
committerDavid S. Miller <davem@davemloft.net>2017-05-03 15:30:24 +0200
commit6979bcc731f9680824a85a9efc43f36d01cec1b2 (patch)
tree930220b0624efcd0c0b94e4c3dbaabf85202fc72 /samples/bpf/bpf_load.c
parentsamples/bpf: make bpf_load.c code compatible with ELF maps section changes (diff)
downloadlinux-6979bcc731f9680824a85a9efc43f36d01cec1b2.tar.xz
linux-6979bcc731f9680824a85a9efc43f36d01cec1b2.zip
samples/bpf: load_bpf.c make callback fixup more flexible
Do this change before others start to use this callback. Change map_perf_test_user.c which seems to be the only user. This patch extends capabilities of commit 9fd63d05f3e8 ("bpf: Allow bpf sample programs (*_user.c) to change bpf_map_def"). Give fixup callback access to struct bpf_map_data, instead of only stuct bpf_map_def. This add flexibility to allow userspace to reassign the map file descriptor. This is very useful when wanting to share maps between several bpf programs. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'samples/bpf/bpf_load.c')
-rw-r--r--samples/bpf/bpf_load.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/samples/bpf/bpf_load.c b/samples/bpf/bpf_load.c
index fedec29c7817..74456b3eb89a 100644
--- a/samples/bpf/bpf_load.c
+++ b/samples/bpf/bpf_load.c
@@ -39,13 +39,6 @@ int event_fd[MAX_PROGS];
int prog_cnt;
int prog_array_fd = -1;
-/* Keeping relevant info on maps */
-struct bpf_map_data {
- int fd;
- char *name;
- size_t elf_offset;
- struct bpf_map_def def;
-};
struct bpf_map_data map_data[MAX_MAPS];
int map_data_count = 0;
@@ -202,8 +195,14 @@ static int load_maps(struct bpf_map_data *maps, int nr_maps,
int i;
for (i = 0; i < nr_maps; i++) {
- if (fixup_map)
- fixup_map(&maps[i].def, maps[i].name, i);
+ if (fixup_map) {
+ fixup_map(&maps[i], i);
+ /* Allow userspace to assign map FD prior to creation */
+ if (maps[i].fd != -1) {
+ map_fd[i] = maps[i].fd;
+ continue;
+ }
+ }
if (maps[i].def.type == BPF_MAP_TYPE_ARRAY_OF_MAPS ||
maps[i].def.type == BPF_MAP_TYPE_HASH_OF_MAPS) {