History

bpf: introduce BPF_F_XDP_HAS_FRAGS flag in prog_flags loading the ebpf program

Introduce BPF_F_XDP_HAS_FRAGS and the related field in bpf_prog_aux in order to notify the driver the loaded program support xdp frags.

Lorenzo Bianconi committed 4 years ago

Commit c2f2cdb1 parent c41ced04 files · +14 −1Browse files

Unified · Split

4 files
  1. include/linux/bpf.h +1 −0
  2. include/uapi/linux/bpf.h +5 −0
  3. kernel/bpf/syscall.c +3 −1
  4. tools/include/uapi/linux/bpf.h +5 −0
include/linux/bpf.h+1−0
@@ -933,6 +933,7 @@ struct bpf_prog_aux { · 932 unmodified lines
933 bool func_proto_unreliable;933 bool func_proto_unreliable;
934 bool sleepable;934 bool sleepable;
935 bool tail_call_reachable;935 bool tail_call_reachable;
936 bool xdp_has_frags;
936 struct hlist_node tramp_hlist;937 struct hlist_node tramp_hlist;
937 /* BTF_KIND_FUNC_PROTO for valid attach_btf_id */938 /* BTF_KIND_FUNC_PROTO for valid attach_btf_id */
938 const struct btf_type *attach_func_proto;939 const struct btf_type *attach_func_proto;
include/uapi/linux/bpf.h+5−0
@@ -1113,6 +1113,11 @@ enum bpf_link_type { · 1112 unmodified lines
1113 */1113 */
1114#define BPF_F_SLEEPABLE (1U << 4)1114#define BPF_F_SLEEPABLE (1U << 4)
1115 1115
1116/* If BPF_F_XDP_HAS_FRAGS is used in BPF_PROG_LOAD command, the loaded program
1117 * fully support xdp frags.
1118 */
1119#define BPF_F_XDP_HAS_FRAGS (1U << 5)
1120
1116/* When BPF ldimm64's insn[0].src_reg != 0 then this can have1121/* When BPF ldimm64's insn[0].src_reg != 0 then this can have
1117 * the following extensions:1122 * the following extensions:
1118 *1123 *
kernel/bpf/syscall.c+3−1
@@ -2217,7 +2217,8 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr) · 2216 unmodified lines
2217 BPF_F_ANY_ALIGNMENT |2217 BPF_F_ANY_ALIGNMENT |
2218 BPF_F_TEST_STATE_FREQ |2218 BPF_F_TEST_STATE_FREQ |
2219 BPF_F_SLEEPABLE |2219 BPF_F_SLEEPABLE |
2220 BPF_F_TEST_RND_HI32))2220 BPF_F_TEST_RND_HI32 |
2221 BPF_F_XDP_HAS_FRAGS))
2221 return -EINVAL;2222 return -EINVAL;
2222 2223
2223 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) &&2224 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) &&
@@ -2303,6 +2304,7 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr) · 79 unmodified lines
2303 prog->aux->dst_prog = dst_prog;2304 prog->aux->dst_prog = dst_prog;
2304 prog->aux->offload_requested = !!attr->prog_ifindex;2305 prog->aux->offload_requested = !!attr->prog_ifindex;
2305 prog->aux->sleepable = attr->prog_flags & BPF_F_SLEEPABLE;2306 prog->aux->sleepable = attr->prog_flags & BPF_F_SLEEPABLE;
2307 prog->aux->xdp_has_frags = attr->prog_flags & BPF_F_XDP_HAS_FRAGS;
2306 2308
2307 err = security_bpf_prog_alloc(prog->aux);2309 err = security_bpf_prog_alloc(prog->aux);
2308 if (err)2310 if (err)
tools/include/uapi/linux/bpf.h+5−0
@@ -1113,6 +1113,11 @@ enum bpf_link_type { · 1112 unmodified lines
1113 */1113 */
1114#define BPF_F_SLEEPABLE (1U << 4)1114#define BPF_F_SLEEPABLE (1U << 4)
1115 1115
1116/* If BPF_F_XDP_HAS_FRAGS is used in BPF_PROG_LOAD command, the loaded program
1117 * fully support xdp frags.
1118 */
1119#define BPF_F_XDP_HAS_FRAGS (1U << 5)
1120
1116/* When BPF ldimm64's insn[0].src_reg != 0 then this can have1121/* When BPF ldimm64's insn[0].src_reg != 0 then this can have
1117 * the following extensions:1122 * the following extensions:
1118 *1123 *