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.
Unified · Split
| @@ -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; |
| @@ -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 have | 1121 | /* When BPF ldimm64's insn[0].src_reg != 0 then this can have |
| 1117 | * the following extensions: | 1122 | * the following extensions: |
| 1118 | * | 1123 | * |
| @@ -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) |
| @@ -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 have | 1121 | /* When BPF ldimm64's insn[0].src_reg != 0 then this can have |
| 1117 | * the following extensions: | 1122 | * the following extensions: |
| 1118 | * | 1123 | * |