net: invert the netdevice.h vs xdp.h dependency
authorJakub Kicinski <kuba@kernel.org>
Thu, 3 Aug 2023 01:02:30 +0000 (18:02 -0700)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 3 Aug 2023 15:38:07 +0000 (08:38 -0700)
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: Jakub Kicinski <kuba@kernel.org>
Acked-by: Jesper Dangaard Brouer <hawk@kernel.org>
Link: https://lore.kernel.org/r/20230803010230.1755386-4-kuba@kernel.org
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
include/linux/filter.h
include/linux/netdevice.h
include/net/busy_poll.h
include/net/xdp.h
include/trace/events/xdp.h
kernel/bpf/btf.c
kernel/bpf/offload.c
kernel/bpf/verifier.c
net/netfilter/nf_conntrack_bpf.c

index f5eabe3fa5e8e1d12edbb1c9484326dc594dcc48..2d6fe30bad5f1b6b38484dc8984d0fc526d8ddde 100644 (file)
@@ -774,23 +774,6 @@ DECLARE_STATIC_KEY_FALSE(bpf_master_redirect_enabled_key);
 
 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);
 
 static inline u32 bpf_prog_insn_size(const struct bpf_prog *prog)
index 5563c8a210b5494bb53a79358ce44e38c9e08844..d8ed85183fe438e6205104e8799bb2c6eee4600e 100644 (file)
@@ -40,7 +40,6 @@
 #include <net/dcbnl.h>
 #endif
 #include <net/netprio_cgroup.h>
-#include <net/xdp.h>
 
 #include <linux/netdev_features.h>
 #include <linux/neighbour.h>
@@ -76,8 +75,12 @@ struct udp_tunnel_nic_info;
 struct udp_tunnel_nic;
 struct bpf_prog;
 struct xdp_buff;
+struct xdp_frame;
+struct xdp_metadata_ops;
 struct xdp_md;
 
+typedef u32 xdp_features_t;
+
 void synchronize_net(void);
 void netdev_set_default_ethtool_ops(struct net_device *dev,
                                    const struct ethtool_ops *ops);
@@ -1628,12 +1631,6 @@ struct net_device_ops {
                                                  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
  *
index f90f0021f5f2dd4932c564ce8b8a7333093456c5..4dabeb6c76d31da1e3725a091a0a2636fcc9667c 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/sched/clock.h>
 #include <linux/sched/signal.h>
 #include <net/ip.h>
+#include <net/xdp.h>
 
 /*             0 - Reserved to indicate value not set
  *     1..NR_CPUS - Reserved for sender_cpu
index d1c5381fc95f2488fb46f9fe1988fa744fb767d9..de08c8e0d13483a6840877dc585f6e87de07553d 100644 (file)
@@ -6,9 +6,10 @@
 #ifndef __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/filter.h>
+#include <linux/netdevice.h>
+#include <linux/skbuff.h> /* skb_shared_info */
 
 /**
  * DOC: XDP RX-queue information
@@ -45,8 +46,6 @@ enum xdp_mem_type {
        MEM_TYPE_MAX,
 };
 
-typedef u32 xdp_features_t;
-
 /* XDP flags for ndo_xdp_xmit */
 #define XDP_XMIT_FLUSH         (1U << 0)       /* doorbell signal consumer */
 #define XDP_XMIT_FLAGS_MASK    XDP_XMIT_FLUSH
@@ -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,
 };
 
+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
 u32 bpf_xdp_metadata_kfunc_id(int 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)
        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__ */
index cd89f1d5ce7b88dc1e2ebe8f0aa7aa49618a82ba..9adc2bdf2f94a5dd534a0a366cc46d30d48e1583 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/filter.h>
 #include <linux/tracepoint.h>
 #include <linux/bpf.h>
+#include <net/xdp.h>
 
 #define __XDP_ACT_MAP(FN)      \
        FN(ABORTED)             \
index ef9581a580e2810362b013e1ec3c4fe3749fa284..249657c466dd33af21c686e827d3608e31d832af 100644 (file)
@@ -29,6 +29,7 @@
 #include <net/netfilter/nf_bpf_link.h>
 
 #include <net/sock.h>
+#include <net/xdp.h>
 #include "../tools/lib/bpf/relo_core.h"
 
 /* BTF (BPF Type Format) is the meta data format which describes
index 8a26cd8814c1b65cd84895cf3ca759c52e46097c..3e4f2ec1af0687dc92d74a376072ab3a77d7b5e3 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/rhashtable.h>
 #include <linux/rtnetlink.h>
 #include <linux/rwsem.h>
+#include <net/xdp.h>
 
 /* Protects offdevs, members of bpf_offload_netdev and offload members
  * of all progs.
index e7b1af016841f131f984d2e15fe62eebdff08a37..132f25dab9318698ff72def1aff6b38375277af6 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/poison.h>
 #include <linux/module.h>
 #include <linux/cpumask.h>
+#include <net/xdp.h>
 
 #include "disasm.h"
 
index 0d36d7285e3f0ef0557ff3cd406a7637120ca50c..c7a6114091ae59718f494f8bf10346f0632b761c 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/types.h>
 #include <linux/btf_ids.h>
 #include <linux/net_namespace.h>
+#include <net/xdp.h>
 #include <net/netfilter/nf_conntrack_bpf.h>
 #include <net/netfilter/nf_conntrack_core.h>