Commit 680ee045 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Martin KaFai Lau

net: invert the netdevice.h vs xdp.h dependency

xdp.h is far more specific and is included in only 67 other
files vs netdevice.h's 1538 include sites.
Make xdp.h include netdevice.h, instead of the other way around.
This decreases the incremental allmodconfig builds size when
xdp.h is touched from 5947 to 662 objects.

Move bpf_prog_run_xdp() to xdp.h, seems appropriate and filter.h
is a mega-header in its own right so it's nice to avoid xdp.h
getting included there as well.

The only unfortunate part is that the typedef for xdp_features_t
has to move to netdevice.h, since its embedded in struct netdevice.
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Acked-by: default avatarJesper Dangaard Brouer <hawk@kernel.org>
Link: https://lore.kernel.org/r/20230803010230.1755386-4-kuba@kernel.orgSigned-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
parent 49e47a5b
...@@ -774,23 +774,6 @@ DECLARE_STATIC_KEY_FALSE(bpf_master_redirect_enabled_key); ...@@ -774,23 +774,6 @@ DECLARE_STATIC_KEY_FALSE(bpf_master_redirect_enabled_key);
u32 xdp_master_redirect(struct xdp_buff *xdp); u32 xdp_master_redirect(struct xdp_buff *xdp);
static __always_inline u32 bpf_prog_run_xdp(const struct bpf_prog *prog,
struct xdp_buff *xdp)
{
/* Driver XDP hooks are invoked within a single NAPI poll cycle and thus
* under local_bh_disable(), which provides the needed RCU protection
* for accessing map entries.
*/
u32 act = __bpf_prog_run(prog, xdp, BPF_DISPATCHER_FUNC(xdp));
if (static_branch_unlikely(&bpf_master_redirect_enabled_key)) {
if (act == XDP_TX && netif_is_bond_slave(xdp->rxq->dev))
act = xdp_master_redirect(xdp);
}
return act;
}
void bpf_prog_change_xdp(struct bpf_prog *prev_prog, struct bpf_prog *prog); void bpf_prog_change_xdp(struct bpf_prog *prev_prog, struct bpf_prog *prog);
static inline u32 bpf_prog_insn_size(const struct bpf_prog *prog) static inline u32 bpf_prog_insn_size(const struct bpf_prog *prog)
......
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
#include <net/dcbnl.h> #include <net/dcbnl.h>
#endif #endif
#include <net/netprio_cgroup.h> #include <net/netprio_cgroup.h>
#include <net/xdp.h>
#include <linux/netdev_features.h> #include <linux/netdev_features.h>
#include <linux/neighbour.h> #include <linux/neighbour.h>
...@@ -76,8 +75,12 @@ struct udp_tunnel_nic_info; ...@@ -76,8 +75,12 @@ struct udp_tunnel_nic_info;
struct udp_tunnel_nic; struct udp_tunnel_nic;
struct bpf_prog; struct bpf_prog;
struct xdp_buff; struct xdp_buff;
struct xdp_frame;
struct xdp_metadata_ops;
struct xdp_md; struct xdp_md;
typedef u32 xdp_features_t;
void synchronize_net(void); void synchronize_net(void);
void netdev_set_default_ethtool_ops(struct net_device *dev, void netdev_set_default_ethtool_ops(struct net_device *dev,
const struct ethtool_ops *ops); const struct ethtool_ops *ops);
...@@ -1628,12 +1631,6 @@ struct net_device_ops { ...@@ -1628,12 +1631,6 @@ struct net_device_ops {
bool cycles); bool cycles);
}; };
struct xdp_metadata_ops {
int (*xmo_rx_timestamp)(const struct xdp_md *ctx, u64 *timestamp);
int (*xmo_rx_hash)(const struct xdp_md *ctx, u32 *hash,
enum xdp_rss_hash_type *rss_type);
};
/** /**
* enum netdev_priv_flags - &struct net_device priv_flags * enum netdev_priv_flags - &struct net_device priv_flags
* *
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/sched/clock.h> #include <linux/sched/clock.h>
#include <linux/sched/signal.h> #include <linux/sched/signal.h>
#include <net/ip.h> #include <net/ip.h>
#include <net/xdp.h>
/* 0 - Reserved to indicate value not set /* 0 - Reserved to indicate value not set
* 1..NR_CPUS - Reserved for sender_cpu * 1..NR_CPUS - Reserved for sender_cpu
......
...@@ -6,9 +6,10 @@ ...@@ -6,9 +6,10 @@
#ifndef __LINUX_NET_XDP_H__ #ifndef __LINUX_NET_XDP_H__
#define __LINUX_NET_XDP_H__ #define __LINUX_NET_XDP_H__
#include <linux/skbuff.h> /* skb_shared_info */
#include <uapi/linux/netdev.h>
#include <linux/bitfield.h> #include <linux/bitfield.h>
#include <linux/filter.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h> /* skb_shared_info */
/** /**
* DOC: XDP RX-queue information * DOC: XDP RX-queue information
...@@ -45,8 +46,6 @@ enum xdp_mem_type { ...@@ -45,8 +46,6 @@ enum xdp_mem_type {
MEM_TYPE_MAX, MEM_TYPE_MAX,
}; };
typedef u32 xdp_features_t;
/* XDP flags for ndo_xdp_xmit */ /* XDP flags for ndo_xdp_xmit */
#define XDP_XMIT_FLUSH (1U << 0) /* doorbell signal consumer */ #define XDP_XMIT_FLUSH (1U << 0) /* doorbell signal consumer */
#define XDP_XMIT_FLAGS_MASK XDP_XMIT_FLUSH #define XDP_XMIT_FLAGS_MASK XDP_XMIT_FLUSH
...@@ -443,6 +442,12 @@ enum xdp_rss_hash_type { ...@@ -443,6 +442,12 @@ enum xdp_rss_hash_type {
XDP_RSS_TYPE_L4_IPV6_SCTP_EX = XDP_RSS_TYPE_L4_IPV6_SCTP | XDP_RSS_L3_DYNHDR, XDP_RSS_TYPE_L4_IPV6_SCTP_EX = XDP_RSS_TYPE_L4_IPV6_SCTP | XDP_RSS_L3_DYNHDR,
}; };
struct xdp_metadata_ops {
int (*xmo_rx_timestamp)(const struct xdp_md *ctx, u64 *timestamp);
int (*xmo_rx_hash)(const struct xdp_md *ctx, u32 *hash,
enum xdp_rss_hash_type *rss_type);
};
#ifdef CONFIG_NET #ifdef CONFIG_NET
u32 bpf_xdp_metadata_kfunc_id(int id); u32 bpf_xdp_metadata_kfunc_id(int id);
bool bpf_dev_bound_kfunc_id(u32 btf_id); bool bpf_dev_bound_kfunc_id(u32 btf_id);
...@@ -474,4 +479,20 @@ static inline void xdp_clear_features_flag(struct net_device *dev) ...@@ -474,4 +479,20 @@ static inline void xdp_clear_features_flag(struct net_device *dev)
xdp_set_features_flag(dev, 0); xdp_set_features_flag(dev, 0);
} }
static __always_inline u32 bpf_prog_run_xdp(const struct bpf_prog *prog,
struct xdp_buff *xdp)
{
/* Driver XDP hooks are invoked within a single NAPI poll cycle and thus
* under local_bh_disable(), which provides the needed RCU protection
* for accessing map entries.
*/
u32 act = __bpf_prog_run(prog, xdp, BPF_DISPATCHER_FUNC(xdp));
if (static_branch_unlikely(&bpf_master_redirect_enabled_key)) {
if (act == XDP_TX && netif_is_bond_slave(xdp->rxq->dev))
act = xdp_master_redirect(xdp);
}
return act;
}
#endif /* __LINUX_NET_XDP_H__ */ #endif /* __LINUX_NET_XDP_H__ */
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/filter.h> #include <linux/filter.h>
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
#include <linux/bpf.h> #include <linux/bpf.h>
#include <net/xdp.h>
#define __XDP_ACT_MAP(FN) \ #define __XDP_ACT_MAP(FN) \
FN(ABORTED) \ FN(ABORTED) \
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <net/netfilter/nf_bpf_link.h> #include <net/netfilter/nf_bpf_link.h>
#include <net/sock.h> #include <net/sock.h>
#include <net/xdp.h>
#include "../tools/lib/bpf/relo_core.h" #include "../tools/lib/bpf/relo_core.h"
/* BTF (BPF Type Format) is the meta data format which describes /* BTF (BPF Type Format) is the meta data format which describes
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/rhashtable.h> #include <linux/rhashtable.h>
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <linux/rwsem.h> #include <linux/rwsem.h>
#include <net/xdp.h>
/* Protects offdevs, members of bpf_offload_netdev and offload members /* Protects offdevs, members of bpf_offload_netdev and offload members
* of all progs. * of all progs.
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/poison.h> #include <linux/poison.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <net/xdp.h>
#include "disasm.h" #include "disasm.h"
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/btf_ids.h> #include <linux/btf_ids.h>
#include <linux/net_namespace.h> #include <linux/net_namespace.h>
#include <net/xdp.h>
#include <net/netfilter/nf_conntrack_bpf.h> #include <net/netfilter/nf_conntrack_bpf.h>
#include <net/netfilter/nf_conntrack_core.h> #include <net/netfilter/nf_conntrack_core.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment