Re: [RFC PATCH v3 21/37] bpf tools: Create eBPF maps defined in an object file

From: Alexei Starovoitov
Date: Mon May 18 2015 - 14:49:09 EST


On 5/17/15 3:56 AM, Wang Nan wrote:
This patch creates maps based on 'map' section in object file using
bpf_create_map(), and store the fds into an array in
'struct bpf_object'. Since the byte order of the object may differ
from the host, swap map definition before processing.

This is the first patch in 'loading' phase. Previous patches parse ELF
object file and create needed data structure, but doesnnt play with
kernel. They belong to 'opening' phase.

Signed-off-by: Wang Nan <wangnan0@xxxxxxxxxx>
...
+ for (j = 0; j < i; j++) {
+ close(obj->maps_fds[j]);
+ obj->maps_fds[j] = -1;

this line is unnecessary, since you're freeing the whole array
at the line below:

+ }
+ free(obj->maps_fds);
+ obj->maps_fds = NULL;

...

void bpf_close_object(struct bpf_object *obj)
{
if (!obj)
return;

bpf_obj_clear_elf(obj);
+ bpf_unload_object(obj);

just realized that this API keeps elf file open for the whole
life time. I think that should be split up.
bpf_open_object() can do elf parsing, creation of maps and
bpf loading.
bpf_close_object() can unload programs, maps. That's fine,
but closing of elf file and freeing memory associated
with parsing sections should be a separate call.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/