[PATCH bpf-next] bpf: add helpers documentation about GPL compatibility

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When writing BPF programs one might refer to the man page
to lookup helpers. When you do so, however you don't have
a way to immediately know if you can use the helper
based on your program licensing requirements.

This patch adds a specific line in the man bpf-helpers
to show that information straight away.

Signed-off-by: Lorenzo Fontana <fontanalorenz@xxxxxxxxx>
---
 include/uapi/linux/bpf.h       | 336 +++++++++++++++++++++++++++++++++
 scripts/bpf_doc.py             |  34 +++-
 tools/include/uapi/linux/bpf.h | 336 +++++++++++++++++++++++++++++++++
 3 files changed, 704 insertions(+), 2 deletions(-)

diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index c4f7892edb2b..2c03010024e3 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -1512,6 +1512,8 @@ union bpf_attr {
  * 	Return
  * 		Map value associated to *key*, or **NULL** if no entry was
  * 		found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_update_elem(struct bpf_map *map, const void *key, const void *value, u64 flags)
  * 	Description
@@ -1530,6 +1532,8 @@ union bpf_attr {
  * 		elements always exist), the helper would return an error.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_delete_elem(struct bpf_map *map, const void *key)
  * 	Description
@@ -1546,6 +1550,8 @@ union bpf_attr {
  * 		**bpf_probe_read_kernel**\ () instead.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_ns(void)
  * 	Description
@@ -1554,6 +1560,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_MONOTONIC**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_trace_printk(const char *fmt, u32 fmt_size, ...)
  * 	Description
@@ -1613,6 +1621,8 @@ union bpf_attr {
  * 	Return
  * 		The number of bytes written to the buffer, or a negative error
  * 		in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u32 bpf_get_prandom_u32(void)
  * 	Description
@@ -1625,6 +1635,8 @@ union bpf_attr {
  * 		cryptographically secure.
  * 	Return
  * 		A random 32-bit unsigned value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_smp_processor_id(void)
  * 	Description
@@ -1634,6 +1646,8 @@ union bpf_attr {
  * 		program.
  * 	Return
  * 		The SMP id of the processor running the program.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len, u64 flags)
  * 	Description
@@ -1651,6 +1665,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_l3_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 size)
  * 	Description
@@ -1676,6 +1692,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_l4_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 flags)
  * 	Description
@@ -1708,6 +1726,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_tail_call(void *ctx, struct bpf_map *prog_array_map, u32 index)
  * 	Description
@@ -1739,6 +1759,8 @@ union bpf_attr {
  * 		which is currently set to 32.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_clone_redirect(struct sk_buff *skb, u32 ifindex, u64 flags)
  * 	Description
@@ -1763,6 +1785,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_pid_tgid(void)
  * 	Return
@@ -1770,11 +1794,15 @@ union bpf_attr {
  * 		created as such:
  * 		*current_task*\ **->tgid << 32 \|**
  * 		*current_task*\ **->pid**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_uid_gid(void)
  * 	Return
  * 		A 64-bit integer containing the current GID and UID, and
  * 		created as such: *current_gid* **<< 32 \|** *current_uid*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_current_comm(void *buf, u32 size_of_buf)
  * 	Description
@@ -1786,6 +1814,8 @@ union bpf_attr {
  * 		it is filled with zeroes.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_cgroup_classid(struct sk_buff *skb)
  * 	Description
@@ -1812,6 +1842,8 @@ union bpf_attr {
  * 		"**y**" or to "**m**".
  * 	Return
  * 		The classid, or 0 for the default unconfigured classid.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
  * 	Description
@@ -1828,6 +1860,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_vlan_pop(struct sk_buff *skb)
  * 	Description
@@ -1840,6 +1874,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
  * 	Description
@@ -1891,6 +1927,8 @@ union bpf_attr {
  * 		Geneve, GRE or IP in IP (IPIP).
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_set_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
  * 	Description
@@ -1928,6 +1966,8 @@ union bpf_attr {
  * 		helper for additional information.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_perf_event_read(struct bpf_map *map, u64 flags)
  * 	Description
@@ -1957,6 +1997,8 @@ union bpf_attr {
  * 	Return
  * 		The value of the perf event counter read from the map, or a
  * 		negative error code in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_redirect(u32 ifindex, u64 flags)
  * 	Description
@@ -1980,6 +2022,8 @@ union bpf_attr {
  * 		**XDP_ABORTED** on error. For other program types, the values
  * 		are **TC_ACT_REDIRECT** on success or **TC_ACT_SHOT** on
  * 		error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_route_realm(struct sk_buff *skb)
  * 	Description
@@ -2004,6 +2048,8 @@ union bpf_attr {
  * 	Return
  * 		The realm of the route for the packet associated to *skb*, or 0
  * 		if none was found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_perf_event_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  * 	Description
@@ -2049,6 +2095,8 @@ union bpf_attr {
  * 		* A combination of both.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_load_bytes(const void *skb, u32 offset, void *to, u32 len)
  * 	Description
@@ -2066,6 +2114,8 @@ union bpf_attr {
  * 		at once from a packet into the eBPF stack.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_stackid(void *ctx, struct bpf_map *map, u64 flags)
  * 	Description
@@ -2108,6 +2158,8 @@ union bpf_attr {
  * 	Return
  * 		The positive or null stack id on success, or a negative error
  * 		in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * s64 bpf_csum_diff(__be32 *from, u32 from_size, __be32 *to, u32 to_size, __wsum seed)
  * 	Description
@@ -2135,6 +2187,8 @@ union bpf_attr {
  * 	Return
  * 		The checksum result, or a negative error code in case of
  * 		failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_tunnel_opt(struct sk_buff *skb, void *opt, u32 size)
  * 	Description
@@ -2153,6 +2207,8 @@ union bpf_attr {
  * 		headers.
  * 	Return
  * 		The size of the option data retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_set_tunnel_opt(struct sk_buff *skb, void *opt, u32 size)
  * 	Description
@@ -2190,6 +2246,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_type(struct sk_buff *skb, u32 type)
  * 	Description
@@ -2217,6 +2275,8 @@ union bpf_attr {
  * 			Send packet to someone else.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_under_cgroup(struct sk_buff *skb, struct bpf_map *map, u32 index)
  * 	Description
@@ -2228,6 +2288,8 @@ union bpf_attr {
  * 		* 0, if the *skb* failed the cgroup2 descendant test.
  * 		* 1, if the *skb* succeeded the cgroup2 descendant test.
  * 		* A negative error code, if an error occurred.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_hash_recalc(struct sk_buff *skb)
  * 	Description
@@ -2244,6 +2306,8 @@ union bpf_attr {
  * 		**bpf_get_hash_recalc**\ ().
  * 	Return
  * 		The 32-bit hash.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_task(void)
  * 	Return
@@ -2267,6 +2331,8 @@ union bpf_attr {
  * 		logs.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_current_task_under_cgroup(struct bpf_map *map, u32 index)
  * 	Description
@@ -2279,6 +2345,8 @@ union bpf_attr {
  *		* 0, if current task belongs to the cgroup2.
  *		* 1, if current task does not belong to the cgroup2.
  * 		* A negative error code, if an error occurred.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
  * 	Description
@@ -2303,6 +2371,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_pull_data(struct sk_buff *skb, u32 len)
  * 	Description
@@ -2339,6 +2409,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * s64 bpf_csum_update(struct sk_buff *skb, __wsum csum)
  * 	Description
@@ -2351,6 +2423,8 @@ union bpf_attr {
  * 	Return
  * 		The checksum on success, or a negative error code in case of
  * 		failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_set_hash_invalid(struct sk_buff *skb)
  * 	Description
@@ -2359,6 +2433,8 @@ union bpf_attr {
  * 		indicate that the hash is outdated and to trigger a
  * 		recalculation the next time the kernel tries to access this
  * 		hash or when the **bpf_get_hash_recalc**\ () helper is called.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_numa_node_id(void)
  * 	Description
@@ -2370,6 +2446,8 @@ union bpf_attr {
  * 		similarly to **bpf_get_smp_processor_id**\ ().
  * 	Return
  * 		The id of current NUMA node.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_head(struct sk_buff *skb, u32 len, u64 flags)
  * 	Description
@@ -2391,6 +2469,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_head(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2406,6 +2486,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_probe_read_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -2419,6 +2501,8 @@ union bpf_attr {
  * 		On success, the strictly positive length of the string,
  * 		including the trailing NUL character. On error, a negative
  * 		value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct sk_buff *skb)
  * 	Description
@@ -2432,6 +2516,8 @@ union bpf_attr {
  * 	Return
  * 		A 8-byte long unique number on success, or 0 if the socket
  * 		field is missing inside *skb*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_addr *ctx)
  * 	Description
@@ -2439,6 +2525,8 @@ union bpf_attr {
  * 		*skb*, but gets socket from **struct bpf_sock_addr** context.
  * 	Return
  * 		A 8-byte long unique number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_ops *ctx)
  * 	Description
@@ -2446,6 +2534,8 @@ union bpf_attr {
  * 		*skb*, but gets socket from **struct bpf_sock_ops** context.
  * 	Return
  * 		A 8-byte long unique number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct sock *sk)
  * 	Description
@@ -2454,6 +2544,8 @@ union bpf_attr {
  * 		also works for sleepable programs.
  * 	Return
  * 		A 8-byte long unique number or 0 if *sk* is NULL.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_socket_uid(struct sk_buff *skb)
  * 	Return
@@ -2469,6 +2561,8 @@ union bpf_attr {
  * 		to value *hash*.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_setsockopt(void *bpf_socket, int level, int optname, void *optval, int optlen)
  * 	Description
@@ -2500,6 +2594,8 @@ union bpf_attr {
  * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_adjust_room(struct sk_buff *skb, s32 len_diff, u32 mode, u64 flags)
  * 	Description
@@ -2550,6 +2646,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2575,6 +2673,8 @@ union bpf_attr {
  * 	Return
  * 		**XDP_REDIRECT** on success, or the value of the two lower bits
  * 		of the *flags* argument on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_redirect_map(struct sk_buff *skb, struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2586,6 +2686,8 @@ union bpf_attr {
  * 		egress path otherwise). This is the only flag supported for now.
  * 	Return
  * 		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sock_map_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
  * 	Description
@@ -2605,6 +2707,8 @@ union bpf_attr {
  * 		already attached to eBPF programs, this results in an error.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_meta(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2634,6 +2738,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_perf_event_read_value(struct bpf_map *map, u64 flags, struct bpf_perf_event_value *buf, u32 buf_size)
  * 	Description
@@ -2684,6 +2790,8 @@ union bpf_attr {
  * 		value and do the calculation inside the eBPF program.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
  * 	Description
@@ -2695,6 +2803,8 @@ union bpf_attr {
  * 		more details).
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_getsockopt(void *bpf_socket, int level, int optname, void *optval, int optlen)
  * 	Description
@@ -2720,6 +2830,8 @@ union bpf_attr {
  * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_override_return(struct pt_regs *regs, u64 rc)
  * 	Description
@@ -2745,6 +2857,8 @@ union bpf_attr {
  * 		x86 architecture is the only one to support this feature.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval)
  * 	Description
@@ -2789,6 +2903,8 @@ union bpf_attr {
  * 		otherwise, a positive number containing the bits that could not
  * 		be set is returned (which comes down to 0 if all bits were set
  * 		as required).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_redirect_map(struct sk_msg_buff *msg, struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2803,6 +2919,8 @@ union bpf_attr {
  * 		egress path otherwise). This is the only flag supported for now.
  * 	Return
  * 		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_apply_bytes(struct sk_msg_buff *msg, u32 bytes)
  * 	Description
@@ -2837,6 +2955,8 @@ union bpf_attr {
  * 		being buffered for *bytes* and is sent as it is received.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_cork_bytes(struct sk_msg_buff *msg, u32 bytes)
  * 	Description
@@ -2855,6 +2975,8 @@ union bpf_attr {
  * 		been accumulated.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_pull_data(struct sk_msg_buff *msg, u32 start, u32 end, u64 flags)
  * 	Description
@@ -2886,6 +3008,8 @@ union bpf_attr {
  * 		be left at zero.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_bind(struct bpf_sock_addr *ctx, struct sockaddr *addr, int addr_len)
  * 	Description
@@ -2904,6 +3028,8 @@ union bpf_attr {
  * 		lead to degraded performance.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_tail(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2918,6 +3044,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_xfrm_state(struct sk_buff *skb, u32 index, struct bpf_xfrm_state *xfrm_state, u32 size, u64 flags)
  * 	Description
@@ -2934,6 +3062,8 @@ union bpf_attr {
  * 		**CONFIG_XFRM** configuration option.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_stack(void *ctx, void *buf, u32 size, u64 flags)
  * 	Description
@@ -2967,6 +3097,8 @@ union bpf_attr {
  * 	Return
  * 		A non-negative value equal to or less than *size* on success,
  * 		or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_load_bytes_relative(const void *skb, u32 offset, void *to, u32 len, u32 start_header)
  * 	Description
@@ -2989,6 +3121,8 @@ union bpf_attr {
  * 		is not available.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_fib_lookup(void *ctx, struct bpf_fib_lookup *params, int plen, u32 flags)
  *	Description
@@ -3023,6 +3157,8 @@ union bpf_attr {
  *
  *		If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU
  *		was exceeded and output params->mtu_result contains the MTU.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sock_hash_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3042,6 +3178,8 @@ union bpf_attr {
  *		already attached to eBPF programs, this results in an error.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_redirect_hash(struct sk_msg_buff *msg, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3056,6 +3194,8 @@ union bpf_attr {
  *		egress path otherwise). This is the only flag supported for now.
  *	Return
  *		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_redirect_hash(struct sk_buff *skb, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3070,6 +3210,8 @@ union bpf_attr {
  *		egress otherwise). This is the only flag supported for now.
  *	Return
  *		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_push_encap(struct sk_buff *skb, u32 type, void *hdr, u32 len)
  *	Description
@@ -3107,6 +3249,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len)
  *	Description
@@ -3122,6 +3266,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_adjust_srh(struct sk_buff *skb, u32 offset, s32 delta)
  *	Description
@@ -3138,6 +3284,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_action(struct sk_buff *skb, u32 action, void *param, u32 param_len)
  *	Description
@@ -3167,6 +3315,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_rc_repeat(void *ctx)
  *	Description
@@ -3186,6 +3336,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_rc_keydown(void *ctx, u32 protocol, u64 scancode, u32 toggle)
  *	Description
@@ -3212,6 +3364,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_skb_cgroup_id(struct sk_buff *skb)
  * 	Description
@@ -3228,6 +3382,8 @@ union bpf_attr {
  * 		**CONFIG_SOCK_CGROUP_DATA** configuration option.
  * 	Return
  * 		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_cgroup_id(void)
  * 	Return
@@ -3251,6 +3407,8 @@ union bpf_attr {
  *		the shared data.
  *	Return
  *		A pointer to the local storage area.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_select_reuseport(struct sk_reuseport_md *reuse, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3260,6 +3418,8 @@ union bpf_attr {
  *		request in the socket buffer.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_skb_ancestor_cgroup_id(struct sk_buff *skb, int ancestor_level)
  *	Description
@@ -3278,6 +3438,8 @@ union bpf_attr {
  *		**bpf_skb_cgroup_id**\ ().
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_lookup_tcp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3315,6 +3477,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_lookup_udp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3352,6 +3516,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_release(void *sock)
  *	Description
@@ -3360,6 +3526,8 @@ union bpf_attr {
  *		**bpf_sk_lookup_xxx**\ ().
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_push_elem(struct bpf_map *map, const void *value, u64 flags)
  * 	Description
@@ -3370,6 +3538,8 @@ union bpf_attr {
  * 			removed to make room for this.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_pop_elem(struct bpf_map *map, void *value)
  * 	Description
@@ -3382,6 +3552,8 @@ union bpf_attr {
  * 		Get an element from *map* without removing it.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_push_data(struct sk_msg_buff *msg, u32 start, u32 len, u64 flags)
  *	Description
@@ -3398,6 +3570,8 @@ union bpf_attr {
  *		error and BPF programs will need to handle them.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_pop_data(struct sk_msg_buff *msg, u32 start, u32 len, u64 flags)
  *	Description
@@ -3410,6 +3584,8 @@ union bpf_attr {
  *		payload and/or *pop* value being to large.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_rc_pointer_rel(void *ctx, s32 rel_x, s32 rel_y)
  *	Description
@@ -3424,6 +3600,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_spin_lock(struct bpf_spin_lock *lock)
  *	Description
@@ -3472,6 +3650,8 @@ union bpf_attr {
  *		* **bpf_spin_lock** is not allowed in inner maps of map-in-map.
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_spin_unlock(struct bpf_spin_lock *lock)
  *	Description
@@ -3479,6 +3659,8 @@ union bpf_attr {
  *		**bpf_spin_lock**\ (\ *lock*\ ).
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_fullsock(struct bpf_sock *sk)
  *	Description
@@ -3487,6 +3669,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_tcp_sock *bpf_tcp_sock(struct bpf_sock *sk)
  *	Description
@@ -3495,6 +3679,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_tcp_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_ecn_set_ce(struct sk_buff *skb)
  *	Description
@@ -3505,6 +3691,8 @@ union bpf_attr {
  *	Return
  *		1 if the **CE** flag is set (either by the current helper call
  *		or because it was already present), 0 if it is not set.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_get_listener_sock(struct bpf_sock *sk)
  *	Description
@@ -3513,6 +3701,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_skc_lookup_tcp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3532,6 +3722,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_tcp_check_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len)
  * 	Description
@@ -3547,6 +3739,8 @@ union bpf_attr {
  * 	Return
  * 		0 if *iph* and *th* are a valid SYN cookie ACK, or a negative
  * 		error otherwise.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sysctl_get_name(struct bpf_sysctl *ctx, char *buf, size_t buf_len, u64 flags)
  *	Description
@@ -3563,6 +3757,8 @@ union bpf_attr {
  *
  *		**-E2BIG** if the buffer wasn't big enough (*buf* will contain
  *		truncated name in this case).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_get_current_value(struct bpf_sysctl *ctx, char *buf, size_t buf_len)
  *	Description
@@ -3582,6 +3778,8 @@ union bpf_attr {
  *
  *		**-EINVAL** if current value was unavailable, e.g. because
  *		sysctl is uninitialized and read returns -EIO for it.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_get_new_value(struct bpf_sysctl *ctx, char *buf, size_t buf_len)
  *	Description
@@ -3599,6 +3797,8 @@ union bpf_attr {
  *		truncated name in this case).
  *
  *		**-EINVAL** if sysctl is being read.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_set_new_value(struct bpf_sysctl *ctx, const char *buf, size_t buf_len)
  *	Description
@@ -3616,6 +3816,8 @@ union bpf_attr {
  *		**-E2BIG** if the *buf_len* is too big.
  *
  *		**-EINVAL** if sysctl is being read.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_strtol(const char *buf, size_t buf_len, u64 flags, long *res)
  *	Description
@@ -3640,6 +3842,8 @@ union bpf_attr {
  *		was provided.
  *
  *		**-ERANGE** if resulting value was out of range.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_strtoul(const char *buf, size_t buf_len, u64 flags, unsigned long *res)
  *	Description
@@ -3663,6 +3867,8 @@ union bpf_attr {
  *		was provided.
  *
  *		**-ERANGE** if resulting value was out of range.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_sk_storage_get(struct bpf_map *map, void *sk, void *value, u64 flags)
  *	Description
@@ -3694,6 +3900,8 @@ union bpf_attr {
  *
  *		**NULL** if not found or there was an error in adding
  *		a new bpf-local-storage.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_storage_delete(struct bpf_map *map, void *sk)
  *	Description
@@ -3703,6 +3911,8 @@ union bpf_attr {
  *
  *		**-ENOENT** if the bpf-local-storage cannot be found.
  *		**-EINVAL** if sk is not a fullsock (e.g. a request_sock).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_send_signal(u32 sig)
  *	Description
@@ -3718,6 +3928,8 @@ union bpf_attr {
  *		**-EPERM** if no permission to send the *sig*.
  *
  *		**-EAGAIN** if bpf program can try again.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * s64 bpf_tcp_gen_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len)
  *	Description
@@ -3744,6 +3956,8 @@ union bpf_attr {
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  * 	Description
@@ -3768,6 +3982,8 @@ union bpf_attr {
  * 		restricted to raw_tracepoint bpf programs.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_user(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3782,6 +3998,8 @@ union bpf_attr {
  * 		*unsafe_ptr* and store the data in *dst*.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_user_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3826,6 +4044,8 @@ union bpf_attr {
  * 		On success, the strictly positive length of the output string,
  * 		including the trailing NUL character. On error, a negative
  * 		value.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_kernel_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3841,6 +4061,8 @@ union bpf_attr {
  *		*rcv_nxt* is the ack_seq to be sent out.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_send_signal_thread(u32 sig)
  *	Description
@@ -3855,12 +4077,16 @@ union bpf_attr {
  *		**-EPERM** if no permission to send the *sig*.
  *
  *		**-EAGAIN** if bpf program can try again.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_jiffies64(void)
  *	Description
  *		Obtain the 64bit jiffies
  *	Return
  *		The 64 bit jiffies
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_read_branch_records(struct bpf_perf_event_data *ctx, void *buf, u32 size, u64 flags)
  *	Description
@@ -3880,6 +4106,8 @@ union bpf_attr {
  *		of **sizeof**\ (**struct perf_branch_entry**\ ).
  *
  *		**-ENOENT** if architecture does not support branch records.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_get_ns_current_pid_tgid(u64 dev, u64 ino, struct bpf_pidns_info *nsdata, u32 size)
  *	Description
@@ -3892,6 +4120,8 @@ union bpf_attr {
  *              with nsfs of current task, or if dev conversion to dev_t lost high bits.
  *
  *		**-ENOENT** if pidns does not exists for the current task.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  *	Description
@@ -3916,6 +4146,8 @@ union bpf_attr {
  *		restricted to raw_tracepoint bpf programs.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_netns_cookie(void *ctx)
  * 	Description
@@ -3929,6 +4161,8 @@ union bpf_attr {
  * 		namespaces instead of sockets.
  * 	Return
  * 		A 8-byte long opaque number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_ancestor_cgroup_id(int ancestor_level)
  * 	Description
@@ -3947,6 +4181,8 @@ union bpf_attr {
  * 		**bpf_get_current_cgroup_id**\ ().
  * 	Return
  * 		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_assign(struct sk_buff *skb, void *sk, u64 flags)
  *	Description
@@ -3978,6 +4214,8 @@ union bpf_attr {
  *
  *		**-ESOCKTNOSUPPORT** if the socket type is not supported
  *		(reuseport).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_assign(struct bpf_sk_lookup *ctx, struct bpf_sock *sk, u64 flags)
  *	Description
@@ -4028,6 +4266,8 @@ union bpf_attr {
  *
  *		* **-ESOCKTNOSUPPORT** if socket is not in allowed
  *		  state (TCP listening or UDP unconnected).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_boot_ns(void)
  * 	Description
@@ -4036,6 +4276,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_BOOTTIME**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_seq_printf(struct seq_file *m, const char *fmt, u32 fmt_size, const void *data, u32 data_len)
  * 	Description
@@ -4065,6 +4307,8 @@ union bpf_attr {
  *		**-E2BIG** if *fmt* contains too many format specifiers.
  *
  *		**-EOVERFLOW** if an overflow happened: The same object will be tried again.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_seq_write(struct seq_file *m, const void *data, u32 len)
  * 	Description
@@ -4075,6 +4319,8 @@ union bpf_attr {
  * 		0 on success, or a negative error in case of failure:
  *
  *		**-EOVERFLOW** if an overflow happened: The same object will be tried again.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_sk_cgroup_id(void *sk)
  *	Description
@@ -4089,6 +4335,8 @@ union bpf_attr {
  *		the **CONFIG_SOCK_CGROUP_DATA** configuration option.
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_sk_ancestor_cgroup_id(void *sk, int ancestor_level)
  *	Description
@@ -4107,6 +4355,8 @@ union bpf_attr {
  *		**bpf_sk_cgroup_id**\ ().
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_ringbuf_output(void *ringbuf, void *data, u64 size, u64 flags)
  * 	Description
@@ -4124,6 +4374,8 @@ union bpf_attr {
  * 		as it will process the newly added payload automatically.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_ringbuf_reserve(void *ringbuf, u64 size, u64 flags)
  * 	Description
@@ -4132,6 +4384,8 @@ union bpf_attr {
  * 	Return
  * 		Valid pointer with *size* bytes of memory available; NULL,
  * 		otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_ringbuf_submit(void *data, u64 flags)
  * 	Description
@@ -4146,6 +4400,8 @@ union bpf_attr {
  * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_ringbuf_discard(void *data, u64 flags)
  * 	Description
@@ -4160,6 +4416,8 @@ union bpf_attr {
  * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ringbuf_query(void *ringbuf, u64 flags)
  *	Description
@@ -4177,6 +4435,8 @@ union bpf_attr {
  *		calculation.
  *	Return
  *		Requested value, or 0, if *flags* are not recognized.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_csum_level(struct sk_buff *skb, u64 level)
  * 	Description
@@ -4209,36 +4469,48 @@ union bpf_attr {
  * 		case of **BPF_CSUM_LEVEL_QUERY**, the current skb->csum_level
  * 		is returned or the error code -EACCES in case the skb is not
  * 		subject to CHECKSUM_UNNECESSARY.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp6_sock *bpf_skc_to_tcp6_sock(void *sk)
  *	Description
  *		Dynamically cast a *sk* pointer to a *tcp6_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_sock *bpf_skc_to_tcp_sock(void *sk)
  *	Description
  *		Dynamically cast a *sk* pointer to a *tcp_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_timewait_sock *bpf_skc_to_tcp_timewait_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *tcp_timewait_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_request_sock *bpf_skc_to_tcp_request_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *tcp_request_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct udp6_sock *bpf_skc_to_udp6_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *udp6_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_task_stack(struct task_struct *task, void *buf, u32 size, u64 flags)
  *	Description
@@ -4271,6 +4543,8 @@ union bpf_attr {
  *	Return
  *		A non-negative value equal to or less than *size* on success,
  *		or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_load_hdr_opt(struct bpf_sock_ops *skops, void *searchby_res, u32 len, u64 flags)
  *	Description
@@ -4334,6 +4608,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_store_hdr_opt(struct bpf_sock_ops *skops, const void *from, u32 len, u64 flags)
  *	Description
@@ -4367,6 +4643,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_reserve_hdr_opt(struct bpf_sock_ops *skops, u32 len, u64 flags)
  *	Description
@@ -4389,6 +4667,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_inode_storage_get(struct bpf_map *map, void *inode, void *value, u64 flags)
  *	Description
@@ -4425,6 +4705,8 @@ union bpf_attr {
  *		0 on success.
  *
  *		**-ENOENT** if the bpf_local_storage cannot be found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_d_path(struct path *path, char *buf, u32 sz)
  *	Description
@@ -4437,6 +4719,8 @@ union bpf_attr {
  *		On success, the strictly positive length of the string,
  *		including the trailing NUL character. On error, a negative
  *		value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_copy_from_user(void *dst, u32 size, const void *user_ptr)
  * 	Description
@@ -4444,6 +4728,8 @@ union bpf_attr {
  * 		the data in *dst*. This is a wrapper of **copy_from_user**\ ().
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_snprintf_btf(char *str, u32 str_size, struct btf_ptr *ptr, u32 btf_ptr_size, u64 flags)
  *	Description
@@ -4480,6 +4766,8 @@ union bpf_attr {
  *		The number of bytes that were written (or would have been
  *		written if output had to be truncated due to string size),
  *		or a negative error in cases of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_seq_printf_btf(struct seq_file *m, struct btf_ptr *ptr, u32 ptr_size, u64 flags)
  *	Description
@@ -4488,6 +4776,8 @@ union bpf_attr {
  *		*flags* are identical to those used for bpf_snprintf_btf.
  *	Return
  *		0 on success or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_skb_cgroup_classid(struct sk_buff *skb)
  * 	Description
@@ -4518,6 +4808,8 @@ union bpf_attr {
  * 	Return
  * 		The helper returns **TC_ACT_REDIRECT** on success or
  * 		**TC_ACT_SHOT** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_per_cpu_ptr(const void *percpu_ptr, u32 cpu)
  *     Description
@@ -4535,6 +4827,8 @@ union bpf_attr {
  *     Return
  *             A pointer pointing to the kernel percpu variable on *cpu*, or
  *             NULL, if *cpu* is invalid.
+ *     GPL Compatibility
+ *             Not required
  *
  * void *bpf_this_cpu_ptr(const void *percpu_ptr)
  *	Description
@@ -4547,6 +4841,8 @@ union bpf_attr {
  *		never return NULL.
  *	Return
  *		A pointer pointing to the kernel percpu variable on this cpu.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_redirect_peer(u32 ifindex, u64 flags)
  * 	Description
@@ -4563,6 +4859,8 @@ union bpf_attr {
  * 	Return
  * 		The helper returns **TC_ACT_REDIRECT** on success or
  * 		**TC_ACT_SHOT** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_task_storage_get(struct bpf_map *map, struct task_struct *task, void *value, u64 flags)
  *	Description
@@ -4591,6 +4889,8 @@ union bpf_attr {
  *
  *		**NULL** if not found or there was an error in adding
  *		a new bpf_local_storage.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_task_storage_delete(struct bpf_map *map, struct task_struct *task)
  *	Description
@@ -4599,6 +4899,8 @@ union bpf_attr {
  *		0 on success.
  *
  *		**-ENOENT** if the bpf_local_storage cannot be found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct task_struct *bpf_get_current_task_btf(void)
  *	Description
@@ -4607,6 +4909,8 @@ union bpf_attr {
  *		*ARG_PTR_TO_BTF_ID* of type *task_struct*.
  *	Return
  *		Pointer to the current task.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_bprm_opts_set(struct linux_binprm *bprm, u64 flags)
  *	Description
@@ -4617,6 +4921,8 @@ union bpf_attr {
  *		is cleared if the flag is not specified.
  *	Return
  *		**-EINVAL** if invalid *flags* are passed, zero otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_coarse_ns(void)
  * 	Description
@@ -4627,6 +4933,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_MONOTONIC_COARSE**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_ima_inode_hash(struct inode *inode, void *dst, u32 size)
  *	Description
@@ -4637,6 +4945,8 @@ union bpf_attr {
  *		The **hash_algo** is returned on success,
  *		**-EOPNOTSUP** if IMA is disabled or **-EINVAL** if
  *		invalid arguments are passed.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct socket *bpf_sock_from_file(struct file *file)
  *	Description
@@ -4645,6 +4955,8 @@ union bpf_attr {
  *	Return
  *		A pointer to a struct socket on success or NULL if the file is
  *		not a socket.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
  *	Description
@@ -4712,6 +5024,8 @@ union bpf_attr {
  *
  *		* **BPF_MTU_CHK_RET_FRAG_NEEDED**
  *		* **BPF_MTU_CHK_RET_SEGS_TOOBIG**
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_for_each_map_elem(struct bpf_map *map, void *callback_fn, void *callback_ctx, u64 flags)
  *	Description
@@ -4741,6 +5055,8 @@ union bpf_attr {
  *	Return
  *		The number of traversed map elements for success, **-EINVAL** for
  *		invalid **flags**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_snprintf(char *str, u32 str_size, const char *fmt, u64 *data, u32 data_len)
  *	Description
@@ -4768,24 +5084,32 @@ union bpf_attr {
  *		be zero-terminated except when **str_size** is 0.
  *
  *		Or **-EBUSY** if the per-CPU memory copy buffer is busy.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sys_bpf(u32 cmd, void *attr, u32 attr_size)
  * 	Description
  * 		Execute bpf syscall with given arguments.
  * 	Return
  * 		A syscall result.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_btf_find_by_name_kind(char *name, int name_sz, u32 kind, int flags)
  * 	Description
  * 		Find BTF type with given name and kind in vmlinux BTF or in module's BTFs.
  * 	Return
  * 		Returns btf_id and btf_obj_fd in lower and upper 32 bits.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sys_close(u32 fd)
  * 	Description
  * 		Execute close syscall for given FD.
  * 	Return
  * 		A syscall result.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_timer_init(struct bpf_timer *timer, struct bpf_map *map, u64 flags)
  *	Description
@@ -4803,6 +5127,8 @@ union bpf_attr {
  *		The user space should either hold a file descriptor to a map with timers
  *		or pin such map in bpffs. When map is unpinned or file descriptor is
  *		closed all timers in the map will be cancelled and freed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_set_callback(struct bpf_timer *timer, void *callback_fn)
  *	Description
@@ -4814,6 +5140,8 @@ union bpf_attr {
  *		The user space should either hold a file descriptor to a map with timers
  *		or pin such map in bpffs. When map is unpinned or file descriptor is
  *		closed all timers in the map will be cancelled and freed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_start(struct bpf_timer *timer, u64 nsecs, u64 flags)
  *	Description
@@ -4840,6 +5168,8 @@ union bpf_attr {
  *		0 on success.
  *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
  *		or invalid *flags* are passed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_cancel(struct bpf_timer *timer)
  *	Description
@@ -4850,12 +5180,16 @@ union bpf_attr {
  *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier.
  *		**-EDEADLK** if callback_fn tried to call bpf_timer_cancel() on its
  *		own timer which would have led to a deadlock otherwise.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_func_ip(void *ctx)
  * 	Description
  * 		Get address of the traced function (for tracing and kprobe programs).
  * 	Return
  * 		Address of the traced function.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_attach_cookie(void *ctx)
  * 	Description
@@ -4871,6 +5205,8 @@ union bpf_attr {
  * 	Return
  *		Value specified by user at BPF link creation/attachment time
  *		or 0, if it was not specified.
+ * 	GPL Compatibility
+ * 		Not required
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
diff --git a/scripts/bpf_doc.py b/scripts/bpf_doc.py
index 00ac7b79cddb..b27c3b8ee831 100755
--- a/scripts/bpf_doc.py
+++ b/scripts/bpf_doc.py
@@ -32,12 +32,14 @@ class APIElement(object):
     An object representing the description of an aspect of the eBPF API.
     @proto: prototype of the API symbol
     @desc: textual description of the symbol
+    @gpl: determine if this API element is GPL only
     @ret: (optional) description of any associated return value
     """
-    def __init__(self, proto='', desc='', ret=''):
+    def __init__(self, proto='', desc='', ret='', gpl=''):
         self.proto = proto
         self.desc = desc
         self.ret = ret
+        self.gpl = gpl
 
 
 class Helper(APIElement):
@@ -98,7 +100,8 @@ class HeaderParser(object):
         proto    = self.parse_proto()
         desc     = self.parse_desc()
         ret      = self.parse_ret()
-        return Helper(proto=proto, desc=desc, ret=ret)
+        gpl      = self.parse_gpl()
+        return Helper(proto=proto, desc=desc, ret=ret, gpl=gpl)
 
     def parse_symbol(self):
         p = re.compile(' \* ?(.+)$')
@@ -172,6 +175,29 @@ class HeaderParser(object):
                 else:
                     break
         return ret
+    
+    def parse_gpl(self):
+        p = re.compile(' \* ?(?:\t| {5,8})GPL Compatibility$')
+        capture = p.match(self.line)
+        if not capture:
+            # Helper can have empty GPL Compatilibity and we might be parsing another
+            # attribute: return but do not consume.
+            return ''
+        # GPL Compatibility can be several lines, some of them possibly empty, and it
+        # stops when another subsection title is met.
+        desc = ''
+        while True:
+            self.line = self.reader.readline()
+            if self.line == ' *\n':
+                desc += '\n'
+            else:
+                p = re.compile(' \* ?(?:\t| {5,8})(?:\t| {8})(.*)')
+                capture = p.match(self.line)
+                if capture:
+                    desc += capture.group(1) + '\n'
+                else:
+                    break
+        return desc
 
     def seek_to(self, target, help_message):
         self.reader.seek(0)
@@ -293,6 +319,10 @@ class PrinterRST(Printer):
             for line in elem.ret.rstrip().split('\n'):
                 print('{}{}'.format('\t\t' if line else '', line))
 
+        if (elem.gpl):
+            print('\tGPL Compatibility')
+            for line in elem.gpl.rstrip().split('\n'):
+                print('{}{}'.format('\t\t' if line else '', line))
         print('')
 
 
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index c4f7892edb2b..2c03010024e3 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -1512,6 +1512,8 @@ union bpf_attr {
  * 	Return
  * 		Map value associated to *key*, or **NULL** if no entry was
  * 		found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_update_elem(struct bpf_map *map, const void *key, const void *value, u64 flags)
  * 	Description
@@ -1530,6 +1532,8 @@ union bpf_attr {
  * 		elements always exist), the helper would return an error.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_delete_elem(struct bpf_map *map, const void *key)
  * 	Description
@@ -1546,6 +1550,8 @@ union bpf_attr {
  * 		**bpf_probe_read_kernel**\ () instead.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_ns(void)
  * 	Description
@@ -1554,6 +1560,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_MONOTONIC**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_trace_printk(const char *fmt, u32 fmt_size, ...)
  * 	Description
@@ -1613,6 +1621,8 @@ union bpf_attr {
  * 	Return
  * 		The number of bytes written to the buffer, or a negative error
  * 		in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u32 bpf_get_prandom_u32(void)
  * 	Description
@@ -1625,6 +1635,8 @@ union bpf_attr {
  * 		cryptographically secure.
  * 	Return
  * 		A random 32-bit unsigned value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_smp_processor_id(void)
  * 	Description
@@ -1634,6 +1646,8 @@ union bpf_attr {
  * 		program.
  * 	Return
  * 		The SMP id of the processor running the program.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len, u64 flags)
  * 	Description
@@ -1651,6 +1665,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_l3_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 size)
  * 	Description
@@ -1676,6 +1692,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_l4_csum_replace(struct sk_buff *skb, u32 offset, u64 from, u64 to, u64 flags)
  * 	Description
@@ -1708,6 +1726,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_tail_call(void *ctx, struct bpf_map *prog_array_map, u32 index)
  * 	Description
@@ -1739,6 +1759,8 @@ union bpf_attr {
  * 		which is currently set to 32.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_clone_redirect(struct sk_buff *skb, u32 ifindex, u64 flags)
  * 	Description
@@ -1763,6 +1785,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_pid_tgid(void)
  * 	Return
@@ -1770,11 +1794,15 @@ union bpf_attr {
  * 		created as such:
  * 		*current_task*\ **->tgid << 32 \|**
  * 		*current_task*\ **->pid**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_uid_gid(void)
  * 	Return
  * 		A 64-bit integer containing the current GID and UID, and
  * 		created as such: *current_gid* **<< 32 \|** *current_uid*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_current_comm(void *buf, u32 size_of_buf)
  * 	Description
@@ -1786,6 +1814,8 @@ union bpf_attr {
  * 		it is filled with zeroes.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_cgroup_classid(struct sk_buff *skb)
  * 	Description
@@ -1812,6 +1842,8 @@ union bpf_attr {
  * 		"**y**" or to "**m**".
  * 	Return
  * 		The classid, or 0 for the default unconfigured classid.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_vlan_push(struct sk_buff *skb, __be16 vlan_proto, u16 vlan_tci)
  * 	Description
@@ -1828,6 +1860,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_vlan_pop(struct sk_buff *skb)
  * 	Description
@@ -1840,6 +1874,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
  * 	Description
@@ -1891,6 +1927,8 @@ union bpf_attr {
  * 		Geneve, GRE or IP in IP (IPIP).
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_set_tunnel_key(struct sk_buff *skb, struct bpf_tunnel_key *key, u32 size, u64 flags)
  * 	Description
@@ -1928,6 +1966,8 @@ union bpf_attr {
  * 		helper for additional information.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_perf_event_read(struct bpf_map *map, u64 flags)
  * 	Description
@@ -1957,6 +1997,8 @@ union bpf_attr {
  * 	Return
  * 		The value of the perf event counter read from the map, or a
  * 		negative error code in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_redirect(u32 ifindex, u64 flags)
  * 	Description
@@ -1980,6 +2022,8 @@ union bpf_attr {
  * 		**XDP_ABORTED** on error. For other program types, the values
  * 		are **TC_ACT_REDIRECT** on success or **TC_ACT_SHOT** on
  * 		error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_route_realm(struct sk_buff *skb)
  * 	Description
@@ -2004,6 +2048,8 @@ union bpf_attr {
  * 	Return
  * 		The realm of the route for the packet associated to *skb*, or 0
  * 		if none was found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_perf_event_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  * 	Description
@@ -2049,6 +2095,8 @@ union bpf_attr {
  * 		* A combination of both.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_load_bytes(const void *skb, u32 offset, void *to, u32 len)
  * 	Description
@@ -2066,6 +2114,8 @@ union bpf_attr {
  * 		at once from a packet into the eBPF stack.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_stackid(void *ctx, struct bpf_map *map, u64 flags)
  * 	Description
@@ -2108,6 +2158,8 @@ union bpf_attr {
  * 	Return
  * 		The positive or null stack id on success, or a negative error
  * 		in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * s64 bpf_csum_diff(__be32 *from, u32 from_size, __be32 *to, u32 to_size, __wsum seed)
  * 	Description
@@ -2135,6 +2187,8 @@ union bpf_attr {
  * 	Return
  * 		The checksum result, or a negative error code in case of
  * 		failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_tunnel_opt(struct sk_buff *skb, void *opt, u32 size)
  * 	Description
@@ -2153,6 +2207,8 @@ union bpf_attr {
  * 		headers.
  * 	Return
  * 		The size of the option data retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_set_tunnel_opt(struct sk_buff *skb, void *opt, u32 size)
  * 	Description
@@ -2190,6 +2246,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_type(struct sk_buff *skb, u32 type)
  * 	Description
@@ -2217,6 +2275,8 @@ union bpf_attr {
  * 			Send packet to someone else.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_under_cgroup(struct sk_buff *skb, struct bpf_map *map, u32 index)
  * 	Description
@@ -2228,6 +2288,8 @@ union bpf_attr {
  * 		* 0, if the *skb* failed the cgroup2 descendant test.
  * 		* 1, if the *skb* succeeded the cgroup2 descendant test.
  * 		* A negative error code, if an error occurred.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_hash_recalc(struct sk_buff *skb)
  * 	Description
@@ -2244,6 +2306,8 @@ union bpf_attr {
  * 		**bpf_get_hash_recalc**\ ().
  * 	Return
  * 		The 32-bit hash.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_task(void)
  * 	Return
@@ -2267,6 +2331,8 @@ union bpf_attr {
  * 		logs.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_current_task_under_cgroup(struct bpf_map *map, u32 index)
  * 	Description
@@ -2279,6 +2345,8 @@ union bpf_attr {
  *		* 0, if current task belongs to the cgroup2.
  *		* 1, if current task does not belong to the cgroup2.
  * 		* A negative error code, if an error occurred.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
  * 	Description
@@ -2303,6 +2371,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_pull_data(struct sk_buff *skb, u32 len)
  * 	Description
@@ -2339,6 +2409,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * s64 bpf_csum_update(struct sk_buff *skb, __wsum csum)
  * 	Description
@@ -2351,6 +2423,8 @@ union bpf_attr {
  * 	Return
  * 		The checksum on success, or a negative error code in case of
  * 		failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_set_hash_invalid(struct sk_buff *skb)
  * 	Description
@@ -2359,6 +2433,8 @@ union bpf_attr {
  * 		indicate that the hash is outdated and to trigger a
  * 		recalculation the next time the kernel tries to access this
  * 		hash or when the **bpf_get_hash_recalc**\ () helper is called.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_numa_node_id(void)
  * 	Description
@@ -2370,6 +2446,8 @@ union bpf_attr {
  * 		similarly to **bpf_get_smp_processor_id**\ ().
  * 	Return
  * 		The id of current NUMA node.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_change_head(struct sk_buff *skb, u32 len, u64 flags)
  * 	Description
@@ -2391,6 +2469,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_head(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2406,6 +2486,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_probe_read_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -2419,6 +2501,8 @@ union bpf_attr {
  * 		On success, the strictly positive length of the string,
  * 		including the trailing NUL character. On error, a negative
  * 		value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct sk_buff *skb)
  * 	Description
@@ -2432,6 +2516,8 @@ union bpf_attr {
  * 	Return
  * 		A 8-byte long unique number on success, or 0 if the socket
  * 		field is missing inside *skb*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_addr *ctx)
  * 	Description
@@ -2439,6 +2525,8 @@ union bpf_attr {
  * 		*skb*, but gets socket from **struct bpf_sock_addr** context.
  * 	Return
  * 		A 8-byte long unique number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct bpf_sock_ops *ctx)
  * 	Description
@@ -2446,6 +2534,8 @@ union bpf_attr {
  * 		*skb*, but gets socket from **struct bpf_sock_ops** context.
  * 	Return
  * 		A 8-byte long unique number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_socket_cookie(struct sock *sk)
  * 	Description
@@ -2454,6 +2544,8 @@ union bpf_attr {
  * 		also works for sleepable programs.
  * 	Return
  * 		A 8-byte long unique number or 0 if *sk* is NULL.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u32 bpf_get_socket_uid(struct sk_buff *skb)
  * 	Return
@@ -2469,6 +2561,8 @@ union bpf_attr {
  * 		to value *hash*.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_setsockopt(void *bpf_socket, int level, int optname, void *optval, int optlen)
  * 	Description
@@ -2500,6 +2594,8 @@ union bpf_attr {
  * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_adjust_room(struct sk_buff *skb, s32 len_diff, u32 mode, u64 flags)
  * 	Description
@@ -2550,6 +2646,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_redirect_map(struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2575,6 +2673,8 @@ union bpf_attr {
  * 	Return
  * 		**XDP_REDIRECT** on success, or the value of the two lower bits
  * 		of the *flags* argument on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_redirect_map(struct sk_buff *skb, struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2586,6 +2686,8 @@ union bpf_attr {
  * 		egress path otherwise). This is the only flag supported for now.
  * 	Return
  * 		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sock_map_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
  * 	Description
@@ -2605,6 +2707,8 @@ union bpf_attr {
  * 		already attached to eBPF programs, this results in an error.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_meta(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2634,6 +2738,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_perf_event_read_value(struct bpf_map *map, u64 flags, struct bpf_perf_event_value *buf, u32 buf_size)
  * 	Description
@@ -2684,6 +2790,8 @@ union bpf_attr {
  * 		value and do the calculation inside the eBPF program.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_perf_prog_read_value(struct bpf_perf_event_data *ctx, struct bpf_perf_event_value *buf, u32 buf_size)
  * 	Description
@@ -2695,6 +2803,8 @@ union bpf_attr {
  * 		more details).
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_getsockopt(void *bpf_socket, int level, int optname, void *optval, int optlen)
  * 	Description
@@ -2720,6 +2830,8 @@ union bpf_attr {
  * 		* **IPPROTO_IPV6**, which supports *optname* **IPV6_TCLASS**.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_override_return(struct pt_regs *regs, u64 rc)
  * 	Description
@@ -2745,6 +2857,8 @@ union bpf_attr {
  * 		x86 architecture is the only one to support this feature.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sock_ops_cb_flags_set(struct bpf_sock_ops *bpf_sock, int argval)
  * 	Description
@@ -2789,6 +2903,8 @@ union bpf_attr {
  * 		otherwise, a positive number containing the bits that could not
  * 		be set is returned (which comes down to 0 if all bits were set
  * 		as required).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_redirect_map(struct sk_msg_buff *msg, struct bpf_map *map, u32 key, u64 flags)
  * 	Description
@@ -2803,6 +2919,8 @@ union bpf_attr {
  * 		egress path otherwise). This is the only flag supported for now.
  * 	Return
  * 		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_apply_bytes(struct sk_msg_buff *msg, u32 bytes)
  * 	Description
@@ -2837,6 +2955,8 @@ union bpf_attr {
  * 		being buffered for *bytes* and is sent as it is received.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_cork_bytes(struct sk_msg_buff *msg, u32 bytes)
  * 	Description
@@ -2855,6 +2975,8 @@ union bpf_attr {
  * 		been accumulated.
  * 	Return
  * 		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_pull_data(struct sk_msg_buff *msg, u32 start, u32 end, u64 flags)
  * 	Description
@@ -2886,6 +3008,8 @@ union bpf_attr {
  * 		be left at zero.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_bind(struct bpf_sock_addr *ctx, struct sockaddr *addr, int addr_len)
  * 	Description
@@ -2904,6 +3028,8 @@ union bpf_attr {
  * 		lead to degraded performance.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_adjust_tail(struct xdp_buff *xdp_md, int delta)
  * 	Description
@@ -2918,6 +3044,8 @@ union bpf_attr {
  * 		direct packet access.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_get_xfrm_state(struct sk_buff *skb, u32 index, struct bpf_xfrm_state *xfrm_state, u32 size, u64 flags)
  * 	Description
@@ -2934,6 +3062,8 @@ union bpf_attr {
  * 		**CONFIG_XFRM** configuration option.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_stack(void *ctx, void *buf, u32 size, u64 flags)
  * 	Description
@@ -2967,6 +3097,8 @@ union bpf_attr {
  * 	Return
  * 		A non-negative value equal to or less than *size* on success,
  * 		or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_load_bytes_relative(const void *skb, u32 offset, void *to, u32 len, u32 start_header)
  * 	Description
@@ -2989,6 +3121,8 @@ union bpf_attr {
  * 		is not available.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_fib_lookup(void *ctx, struct bpf_fib_lookup *params, int plen, u32 flags)
  *	Description
@@ -3023,6 +3157,8 @@ union bpf_attr {
  *
  *		If lookup fails with BPF_FIB_LKUP_RET_FRAG_NEEDED, then the MTU
  *		was exceeded and output params->mtu_result contains the MTU.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sock_hash_update(struct bpf_sock_ops *skops, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3042,6 +3178,8 @@ union bpf_attr {
  *		already attached to eBPF programs, this results in an error.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_redirect_hash(struct sk_msg_buff *msg, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3056,6 +3194,8 @@ union bpf_attr {
  *		egress path otherwise). This is the only flag supported for now.
  *	Return
  *		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_redirect_hash(struct sk_buff *skb, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3070,6 +3210,8 @@ union bpf_attr {
  *		egress otherwise). This is the only flag supported for now.
  *	Return
  *		**SK_PASS** on success, or **SK_DROP** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_push_encap(struct sk_buff *skb, u32 type, void *hdr, u32 len)
  *	Description
@@ -3107,6 +3249,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_store_bytes(struct sk_buff *skb, u32 offset, const void *from, u32 len)
  *	Description
@@ -3122,6 +3266,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_adjust_srh(struct sk_buff *skb, u32 offset, s32 delta)
  *	Description
@@ -3138,6 +3284,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_lwt_seg6_action(struct sk_buff *skb, u32 action, void *param, u32 param_len)
  *	Description
@@ -3167,6 +3315,8 @@ union bpf_attr {
  * 		direct packet access.
  *	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_rc_repeat(void *ctx)
  *	Description
@@ -3186,6 +3336,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_rc_keydown(void *ctx, u32 protocol, u64 scancode, u32 toggle)
  *	Description
@@ -3212,6 +3364,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_skb_cgroup_id(struct sk_buff *skb)
  * 	Description
@@ -3228,6 +3382,8 @@ union bpf_attr {
  * 		**CONFIG_SOCK_CGROUP_DATA** configuration option.
  * 	Return
  * 		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_cgroup_id(void)
  * 	Return
@@ -3251,6 +3407,8 @@ union bpf_attr {
  *		the shared data.
  *	Return
  *		A pointer to the local storage area.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_select_reuseport(struct sk_reuseport_md *reuse, struct bpf_map *map, void *key, u64 flags)
  *	Description
@@ -3260,6 +3418,8 @@ union bpf_attr {
  *		request in the socket buffer.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_skb_ancestor_cgroup_id(struct sk_buff *skb, int ancestor_level)
  *	Description
@@ -3278,6 +3438,8 @@ union bpf_attr {
  *		**bpf_skb_cgroup_id**\ ().
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_lookup_tcp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3315,6 +3477,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_lookup_udp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3352,6 +3516,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_release(void *sock)
  *	Description
@@ -3360,6 +3526,8 @@ union bpf_attr {
  *		**bpf_sk_lookup_xxx**\ ().
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_push_elem(struct bpf_map *map, const void *value, u64 flags)
  * 	Description
@@ -3370,6 +3538,8 @@ union bpf_attr {
  * 			removed to make room for this.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_map_pop_elem(struct bpf_map *map, void *value)
  * 	Description
@@ -3382,6 +3552,8 @@ union bpf_attr {
  * 		Get an element from *map* without removing it.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_push_data(struct sk_msg_buff *msg, u32 start, u32 len, u64 flags)
  *	Description
@@ -3398,6 +3570,8 @@ union bpf_attr {
  *		error and BPF programs will need to handle them.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_msg_pop_data(struct sk_msg_buff *msg, u32 start, u32 len, u64 flags)
  *	Description
@@ -3410,6 +3584,8 @@ union bpf_attr {
  *		payload and/or *pop* value being to large.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_rc_pointer_rel(void *ctx, s32 rel_x, s32 rel_y)
  *	Description
@@ -3424,6 +3600,8 @@ union bpf_attr {
  *		"**y**".
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_spin_lock(struct bpf_spin_lock *lock)
  *	Description
@@ -3472,6 +3650,8 @@ union bpf_attr {
  *		* **bpf_spin_lock** is not allowed in inner maps of map-in-map.
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_spin_unlock(struct bpf_spin_lock *lock)
  *	Description
@@ -3479,6 +3659,8 @@ union bpf_attr {
  *		**bpf_spin_lock**\ (\ *lock*\ ).
  *	Return
  *		0
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_sk_fullsock(struct bpf_sock *sk)
  *	Description
@@ -3487,6 +3669,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_tcp_sock *bpf_tcp_sock(struct bpf_sock *sk)
  *	Description
@@ -3495,6 +3679,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_tcp_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_skb_ecn_set_ce(struct sk_buff *skb)
  *	Description
@@ -3505,6 +3691,8 @@ union bpf_attr {
  *	Return
  *		1 if the **CE** flag is set (either by the current helper call
  *		or because it was already present), 0 if it is not set.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_get_listener_sock(struct bpf_sock *sk)
  *	Description
@@ -3513,6 +3701,8 @@ union bpf_attr {
  *	Return
  *		A **struct bpf_sock** pointer on success, or **NULL** in
  *		case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct bpf_sock *bpf_skc_lookup_tcp(void *ctx, struct bpf_sock_tuple *tuple, u32 tuple_size, u64 netns, u64 flags)
  *	Description
@@ -3532,6 +3722,8 @@ union bpf_attr {
  *		For sockets with reuseport option, the **struct bpf_sock**
  *		result is from *reuse*\ **->socks**\ [] using the hash of the
  *		tuple.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_tcp_check_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len)
  * 	Description
@@ -3547,6 +3739,8 @@ union bpf_attr {
  * 	Return
  * 		0 if *iph* and *th* are a valid SYN cookie ACK, or a negative
  * 		error otherwise.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sysctl_get_name(struct bpf_sysctl *ctx, char *buf, size_t buf_len, u64 flags)
  *	Description
@@ -3563,6 +3757,8 @@ union bpf_attr {
  *
  *		**-E2BIG** if the buffer wasn't big enough (*buf* will contain
  *		truncated name in this case).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_get_current_value(struct bpf_sysctl *ctx, char *buf, size_t buf_len)
  *	Description
@@ -3582,6 +3778,8 @@ union bpf_attr {
  *
  *		**-EINVAL** if current value was unavailable, e.g. because
  *		sysctl is uninitialized and read returns -EIO for it.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_get_new_value(struct bpf_sysctl *ctx, char *buf, size_t buf_len)
  *	Description
@@ -3599,6 +3797,8 @@ union bpf_attr {
  *		truncated name in this case).
  *
  *		**-EINVAL** if sysctl is being read.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sysctl_set_new_value(struct bpf_sysctl *ctx, const char *buf, size_t buf_len)
  *	Description
@@ -3616,6 +3816,8 @@ union bpf_attr {
  *		**-E2BIG** if the *buf_len* is too big.
  *
  *		**-EINVAL** if sysctl is being read.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_strtol(const char *buf, size_t buf_len, u64 flags, long *res)
  *	Description
@@ -3640,6 +3842,8 @@ union bpf_attr {
  *		was provided.
  *
  *		**-ERANGE** if resulting value was out of range.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_strtoul(const char *buf, size_t buf_len, u64 flags, unsigned long *res)
  *	Description
@@ -3663,6 +3867,8 @@ union bpf_attr {
  *		was provided.
  *
  *		**-ERANGE** if resulting value was out of range.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_sk_storage_get(struct bpf_map *map, void *sk, void *value, u64 flags)
  *	Description
@@ -3694,6 +3900,8 @@ union bpf_attr {
  *
  *		**NULL** if not found or there was an error in adding
  *		a new bpf-local-storage.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_storage_delete(struct bpf_map *map, void *sk)
  *	Description
@@ -3703,6 +3911,8 @@ union bpf_attr {
  *
  *		**-ENOENT** if the bpf-local-storage cannot be found.
  *		**-EINVAL** if sk is not a fullsock (e.g. a request_sock).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_send_signal(u32 sig)
  *	Description
@@ -3718,6 +3928,8 @@ union bpf_attr {
  *		**-EPERM** if no permission to send the *sig*.
  *
  *		**-EAGAIN** if bpf program can try again.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * s64 bpf_tcp_gen_syncookie(void *sk, void *iph, u32 iph_len, struct tcphdr *th, u32 th_len)
  *	Description
@@ -3744,6 +3956,8 @@ union bpf_attr {
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_skb_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  * 	Description
@@ -3768,6 +3982,8 @@ union bpf_attr {
  * 		restricted to raw_tracepoint bpf programs.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_user(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3782,6 +3998,8 @@ union bpf_attr {
  * 		*unsafe_ptr* and store the data in *dst*.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_user_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3826,6 +4044,8 @@ union bpf_attr {
  * 		On success, the strictly positive length of the output string,
  * 		including the trailing NUL character. On error, a negative
  * 		value.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_probe_read_kernel_str(void *dst, u32 size, const void *unsafe_ptr)
  * 	Description
@@ -3841,6 +4061,8 @@ union bpf_attr {
  *		*rcv_nxt* is the ack_seq to be sent out.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_send_signal_thread(u32 sig)
  *	Description
@@ -3855,12 +4077,16 @@ union bpf_attr {
  *		**-EPERM** if no permission to send the *sig*.
  *
  *		**-EAGAIN** if bpf program can try again.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_jiffies64(void)
  *	Description
  *		Obtain the 64bit jiffies
  *	Return
  *		The 64 bit jiffies
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_read_branch_records(struct bpf_perf_event_data *ctx, void *buf, u32 size, u64 flags)
  *	Description
@@ -3880,6 +4106,8 @@ union bpf_attr {
  *		of **sizeof**\ (**struct perf_branch_entry**\ ).
  *
  *		**-ENOENT** if architecture does not support branch records.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_get_ns_current_pid_tgid(u64 dev, u64 ino, struct bpf_pidns_info *nsdata, u32 size)
  *	Description
@@ -3892,6 +4120,8 @@ union bpf_attr {
  *              with nsfs of current task, or if dev conversion to dev_t lost high bits.
  *
  *		**-ENOENT** if pidns does not exists for the current task.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_xdp_output(void *ctx, struct bpf_map *map, u64 flags, void *data, u64 size)
  *	Description
@@ -3916,6 +4146,8 @@ union bpf_attr {
  *		restricted to raw_tracepoint bpf programs.
  *	Return
  *		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_netns_cookie(void *ctx)
  * 	Description
@@ -3929,6 +4161,8 @@ union bpf_attr {
  * 		namespaces instead of sockets.
  * 	Return
  * 		A 8-byte long opaque number.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_get_current_ancestor_cgroup_id(int ancestor_level)
  * 	Description
@@ -3947,6 +4181,8 @@ union bpf_attr {
  * 		**bpf_get_current_cgroup_id**\ ().
  * 	Return
  * 		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_assign(struct sk_buff *skb, void *sk, u64 flags)
  *	Description
@@ -3978,6 +4214,8 @@ union bpf_attr {
  *
  *		**-ESOCKTNOSUPPORT** if the socket type is not supported
  *		(reuseport).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sk_assign(struct bpf_sk_lookup *ctx, struct bpf_sock *sk, u64 flags)
  *	Description
@@ -4028,6 +4266,8 @@ union bpf_attr {
  *
  *		* **-ESOCKTNOSUPPORT** if socket is not in allowed
  *		  state (TCP listening or UDP unconnected).
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_boot_ns(void)
  * 	Description
@@ -4036,6 +4276,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_BOOTTIME**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_seq_printf(struct seq_file *m, const char *fmt, u32 fmt_size, const void *data, u32 data_len)
  * 	Description
@@ -4065,6 +4307,8 @@ union bpf_attr {
  *		**-E2BIG** if *fmt* contains too many format specifiers.
  *
  *		**-EOVERFLOW** if an overflow happened: The same object will be tried again.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_seq_write(struct seq_file *m, const void *data, u32 len)
  * 	Description
@@ -4075,6 +4319,8 @@ union bpf_attr {
  * 		0 on success, or a negative error in case of failure:
  *
  *		**-EOVERFLOW** if an overflow happened: The same object will be tried again.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_sk_cgroup_id(void *sk)
  *	Description
@@ -4089,6 +4335,8 @@ union bpf_attr {
  *		the **CONFIG_SOCK_CGROUP_DATA** configuration option.
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_sk_ancestor_cgroup_id(void *sk, int ancestor_level)
  *	Description
@@ -4107,6 +4355,8 @@ union bpf_attr {
  *		**bpf_sk_cgroup_id**\ ().
  *	Return
  *		The id is returned or 0 in case the id could not be retrieved.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_ringbuf_output(void *ringbuf, void *data, u64 size, u64 flags)
  * 	Description
@@ -4124,6 +4374,8 @@ union bpf_attr {
  * 		as it will process the newly added payload automatically.
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_ringbuf_reserve(void *ringbuf, u64 size, u64 flags)
  * 	Description
@@ -4132,6 +4384,8 @@ union bpf_attr {
  * 	Return
  * 		Valid pointer with *size* bytes of memory available; NULL,
  * 		otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_ringbuf_submit(void *data, u64 flags)
  * 	Description
@@ -4146,6 +4400,8 @@ union bpf_attr {
  * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void bpf_ringbuf_discard(void *data, u64 flags)
  * 	Description
@@ -4160,6 +4416,8 @@ union bpf_attr {
  * 		See 'bpf_ringbuf_output()' for the definition of adaptive notification.
  * 	Return
  * 		Nothing. Always succeeds.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ringbuf_query(void *ringbuf, u64 flags)
  *	Description
@@ -4177,6 +4435,8 @@ union bpf_attr {
  *		calculation.
  *	Return
  *		Requested value, or 0, if *flags* are not recognized.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_csum_level(struct sk_buff *skb, u64 level)
  * 	Description
@@ -4209,36 +4469,48 @@ union bpf_attr {
  * 		case of **BPF_CSUM_LEVEL_QUERY**, the current skb->csum_level
  * 		is returned or the error code -EACCES in case the skb is not
  * 		subject to CHECKSUM_UNNECESSARY.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp6_sock *bpf_skc_to_tcp6_sock(void *sk)
  *	Description
  *		Dynamically cast a *sk* pointer to a *tcp6_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_sock *bpf_skc_to_tcp_sock(void *sk)
  *	Description
  *		Dynamically cast a *sk* pointer to a *tcp_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_timewait_sock *bpf_skc_to_tcp_timewait_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *tcp_timewait_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct tcp_request_sock *bpf_skc_to_tcp_request_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *tcp_request_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct udp6_sock *bpf_skc_to_udp6_sock(void *sk)
  * 	Description
  *		Dynamically cast a *sk* pointer to a *udp6_sock* pointer.
  *	Return
  *		*sk* if casting is valid, or **NULL** otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_get_task_stack(struct task_struct *task, void *buf, u32 size, u64 flags)
  *	Description
@@ -4271,6 +4543,8 @@ union bpf_attr {
  *	Return
  *		A non-negative value equal to or less than *size* on success,
  *		or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_load_hdr_opt(struct bpf_sock_ops *skops, void *searchby_res, u32 len, u64 flags)
  *	Description
@@ -4334,6 +4608,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_store_hdr_opt(struct bpf_sock_ops *skops, const void *from, u32 len, u64 flags)
  *	Description
@@ -4367,6 +4643,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_reserve_hdr_opt(struct bpf_sock_ops *skops, u32 len, u64 flags)
  *	Description
@@ -4389,6 +4667,8 @@ union bpf_attr {
  *
  *		**-EPERM** if the helper cannot be used under the current
  *		*skops*\ **->op**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_inode_storage_get(struct bpf_map *map, void *inode, void *value, u64 flags)
  *	Description
@@ -4425,6 +4705,8 @@ union bpf_attr {
  *		0 on success.
  *
  *		**-ENOENT** if the bpf_local_storage cannot be found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_d_path(struct path *path, char *buf, u32 sz)
  *	Description
@@ -4437,6 +4719,8 @@ union bpf_attr {
  *		On success, the strictly positive length of the string,
  *		including the trailing NUL character. On error, a negative
  *		value.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_copy_from_user(void *dst, u32 size, const void *user_ptr)
  * 	Description
@@ -4444,6 +4728,8 @@ union bpf_attr {
  * 		the data in *dst*. This is a wrapper of **copy_from_user**\ ().
  * 	Return
  * 		0 on success, or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_snprintf_btf(char *str, u32 str_size, struct btf_ptr *ptr, u32 btf_ptr_size, u64 flags)
  *	Description
@@ -4480,6 +4766,8 @@ union bpf_attr {
  *		The number of bytes that were written (or would have been
  *		written if output had to be truncated due to string size),
  *		or a negative error in cases of failure.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_seq_printf_btf(struct seq_file *m, struct btf_ptr *ptr, u32 ptr_size, u64 flags)
  *	Description
@@ -4488,6 +4776,8 @@ union bpf_attr {
  *		*flags* are identical to those used for bpf_snprintf_btf.
  *	Return
  *		0 on success or a negative error in case of failure.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_skb_cgroup_classid(struct sk_buff *skb)
  * 	Description
@@ -4518,6 +4808,8 @@ union bpf_attr {
  * 	Return
  * 		The helper returns **TC_ACT_REDIRECT** on success or
  * 		**TC_ACT_SHOT** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_per_cpu_ptr(const void *percpu_ptr, u32 cpu)
  *     Description
@@ -4535,6 +4827,8 @@ union bpf_attr {
  *     Return
  *             A pointer pointing to the kernel percpu variable on *cpu*, or
  *             NULL, if *cpu* is invalid.
+ *     GPL Compatibility
+ *             Not required
  *
  * void *bpf_this_cpu_ptr(const void *percpu_ptr)
  *	Description
@@ -4547,6 +4841,8 @@ union bpf_attr {
  *		never return NULL.
  *	Return
  *		A pointer pointing to the kernel percpu variable on this cpu.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_redirect_peer(u32 ifindex, u64 flags)
  * 	Description
@@ -4563,6 +4859,8 @@ union bpf_attr {
  * 	Return
  * 		The helper returns **TC_ACT_REDIRECT** on success or
  * 		**TC_ACT_SHOT** on error.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * void *bpf_task_storage_get(struct bpf_map *map, struct task_struct *task, void *value, u64 flags)
  *	Description
@@ -4591,6 +4889,8 @@ union bpf_attr {
  *
  *		**NULL** if not found or there was an error in adding
  *		a new bpf_local_storage.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_task_storage_delete(struct bpf_map *map, struct task_struct *task)
  *	Description
@@ -4599,6 +4899,8 @@ union bpf_attr {
  *		0 on success.
  *
  *		**-ENOENT** if the bpf_local_storage cannot be found.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct task_struct *bpf_get_current_task_btf(void)
  *	Description
@@ -4607,6 +4909,8 @@ union bpf_attr {
  *		*ARG_PTR_TO_BTF_ID* of type *task_struct*.
  *	Return
  *		Pointer to the current task.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_bprm_opts_set(struct linux_binprm *bprm, u64 flags)
  *	Description
@@ -4617,6 +4921,8 @@ union bpf_attr {
  *		is cleared if the flag is not specified.
  *	Return
  *		**-EINVAL** if invalid *flags* are passed, zero otherwise.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * u64 bpf_ktime_get_coarse_ns(void)
  * 	Description
@@ -4627,6 +4933,8 @@ union bpf_attr {
  * 		See: **clock_gettime**\ (**CLOCK_MONOTONIC_COARSE**)
  * 	Return
  * 		Current *ktime*.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_ima_inode_hash(struct inode *inode, void *dst, u32 size)
  *	Description
@@ -4637,6 +4945,8 @@ union bpf_attr {
  *		The **hash_algo** is returned on success,
  *		**-EOPNOTSUP** if IMA is disabled or **-EINVAL** if
  *		invalid arguments are passed.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * struct socket *bpf_sock_from_file(struct file *file)
  *	Description
@@ -4645,6 +4955,8 @@ union bpf_attr {
  *	Return
  *		A pointer to a struct socket on success or NULL if the file is
  *		not a socket.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_check_mtu(void *ctx, u32 ifindex, u32 *mtu_len, s32 len_diff, u64 flags)
  *	Description
@@ -4712,6 +5024,8 @@ union bpf_attr {
  *
  *		* **BPF_MTU_CHK_RET_FRAG_NEEDED**
  *		* **BPF_MTU_CHK_RET_SEGS_TOOBIG**
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_for_each_map_elem(struct bpf_map *map, void *callback_fn, void *callback_ctx, u64 flags)
  *	Description
@@ -4741,6 +5055,8 @@ union bpf_attr {
  *	Return
  *		The number of traversed map elements for success, **-EINVAL** for
  *		invalid **flags**.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_snprintf(char *str, u32 str_size, const char *fmt, u64 *data, u32 data_len)
  *	Description
@@ -4768,24 +5084,32 @@ union bpf_attr {
  *		be zero-terminated except when **str_size** is 0.
  *
  *		Or **-EBUSY** if the per-CPU memory copy buffer is busy.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_sys_bpf(u32 cmd, void *attr, u32 attr_size)
  * 	Description
  * 		Execute bpf syscall with given arguments.
  * 	Return
  * 		A syscall result.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_btf_find_by_name_kind(char *name, int name_sz, u32 kind, int flags)
  * 	Description
  * 		Find BTF type with given name and kind in vmlinux BTF or in module's BTFs.
  * 	Return
  * 		Returns btf_id and btf_obj_fd in lower and upper 32 bits.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_sys_close(u32 fd)
  * 	Description
  * 		Execute close syscall for given FD.
  * 	Return
  * 		A syscall result.
+ * 	GPL Compatibility
+ * 		Not required
  *
  * long bpf_timer_init(struct bpf_timer *timer, struct bpf_map *map, u64 flags)
  *	Description
@@ -4803,6 +5127,8 @@ union bpf_attr {
  *		The user space should either hold a file descriptor to a map with timers
  *		or pin such map in bpffs. When map is unpinned or file descriptor is
  *		closed all timers in the map will be cancelled and freed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_set_callback(struct bpf_timer *timer, void *callback_fn)
  *	Description
@@ -4814,6 +5140,8 @@ union bpf_attr {
  *		The user space should either hold a file descriptor to a map with timers
  *		or pin such map in bpffs. When map is unpinned or file descriptor is
  *		closed all timers in the map will be cancelled and freed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_start(struct bpf_timer *timer, u64 nsecs, u64 flags)
  *	Description
@@ -4840,6 +5168,8 @@ union bpf_attr {
  *		0 on success.
  *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier
  *		or invalid *flags* are passed.
+ * 	GPL Compatibility
+ * 		Required
  *
  * long bpf_timer_cancel(struct bpf_timer *timer)
  *	Description
@@ -4850,12 +5180,16 @@ union bpf_attr {
  *		**-EINVAL** if *timer* was not initialized with bpf_timer_init() earlier.
  *		**-EDEADLK** if callback_fn tried to call bpf_timer_cancel() on its
  *		own timer which would have led to a deadlock otherwise.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_func_ip(void *ctx)
  * 	Description
  * 		Get address of the traced function (for tracing and kprobe programs).
  * 	Return
  * 		Address of the traced function.
+ * 	GPL Compatibility
+ * 		Required
  *
  * u64 bpf_get_attach_cookie(void *ctx)
  * 	Description
@@ -4871,6 +5205,8 @@ union bpf_attr {
  * 	Return
  *		Value specified by user at BPF link creation/attachment time
  *		or 0, if it was not specified.
+ * 	GPL Compatibility
+ * 		Not required
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
-- 
2.32.0





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux