diff options
| author | David S. Miller <davem@davemloft.net> | 2019-10-14 12:17:21 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-10-14 12:17:21 -0700 | 
| commit | a98d62c3ee902851500ff35525f4936bffc51466 (patch) | |
| tree | 19384ec33e826e3b9a46e580087eda5faae8df1d /tools/bpf/bpftool/prog.c | |
| parent | 7e0d15ee0d8ba28a41ed02c8d2c1c17124b13234 (diff) | |
| parent | b8fc345d6b5d661e1125bd6a0e30b6fabf1a076e (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says:
====================
pull-request: bpf-next 2019-10-14
The following pull-request contains BPF updates for your *net-next* tree.
12 days of development and
85 files changed, 1889 insertions(+), 1020 deletions(-)
The main changes are:
1) auto-generation of bpf_helper_defs.h, from Andrii.
2) split of bpf_helpers.h into bpf_{helpers, helper_defs, endian, tracing}.h
   and move into libbpf, from Andrii.
3) Track contents of read-only maps as scalars in the verifier, from Andrii.
4) small x86 JIT optimization, from Daniel.
5) cross compilation support, from Ivan.
6) bpf flow_dissector enhancements, from Jakub and Stanislav.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/bpf/bpftool/prog.c')
| -rw-r--r-- | tools/bpf/bpftool/prog.c | 22 | 
1 files changed, 12 insertions, 10 deletions
diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 43fdbbfe41bb..27da96a797ab 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -1092,9 +1092,7 @@ free_data_in:  static int load_with_options(int argc, char **argv, bool first_prog_only)  {  	struct bpf_object_load_attr load_attr = { 0 }; -	struct bpf_object_open_attr open_attr = { -		.prog_type = BPF_PROG_TYPE_UNSPEC, -	}; +	enum bpf_prog_type common_prog_type = BPF_PROG_TYPE_UNSPEC;  	enum bpf_attach_type expected_attach_type;  	struct map_replace *map_replace = NULL;  	struct bpf_program *prog = NULL, *pos; @@ -1105,11 +1103,16 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  	const char *pinfile;  	unsigned int i, j;  	__u32 ifindex = 0; +	const char *file;  	int idx, err; +	LIBBPF_OPTS(bpf_object_open_opts, open_opts, +		.relaxed_maps = relaxed_maps, +	); +  	if (!REQ_ARGS(2))  		return -1; -	open_attr.file = GET_ARG(); +	file = GET_ARG();  	pinfile = GET_ARG();  	while (argc) { @@ -1118,7 +1121,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  			NEXT_ARG(); -			if (open_attr.prog_type != BPF_PROG_TYPE_UNSPEC) { +			if (common_prog_type != BPF_PROG_TYPE_UNSPEC) {  				p_err("program type already specified");  				goto err_free_reuse_maps;  			} @@ -1135,8 +1138,7 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  			strcat(type, *argv);  			strcat(type, "/"); -			err = libbpf_prog_type_by_name(type, -						       &open_attr.prog_type, +			err = libbpf_prog_type_by_name(type, &common_prog_type,  						       &expected_attach_type);  			free(type);  			if (err < 0) @@ -1224,16 +1226,16 @@ static int load_with_options(int argc, char **argv, bool first_prog_only)  	set_max_rlimit(); -	obj = __bpf_object__open_xattr(&open_attr, bpf_flags); +	obj = bpf_object__open_file(file, &open_opts);  	if (IS_ERR_OR_NULL(obj)) {  		p_err("failed to open object file");  		goto err_free_reuse_maps;  	}  	bpf_object__for_each_program(pos, obj) { -		enum bpf_prog_type prog_type = open_attr.prog_type; +		enum bpf_prog_type prog_type = common_prog_type; -		if (open_attr.prog_type == BPF_PROG_TYPE_UNSPEC) { +		if (prog_type == BPF_PROG_TYPE_UNSPEC) {  			const char *sec_name = bpf_program__title(pos, false);  			err = libbpf_prog_type_by_name(sec_name, &prog_type,  | 
