mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 08:03:01 +09:00
Merge branch 'net: struct netdev_rx_queue and xdp.h reshuffling'
Jakub Kicinski says: ==================== While poking at struct netdev_rx_queue I got annoyed by the huge rebuild times. I split it out from netdevice.h and then realized that it was the main reason we included xdp.h in there. So I removed that dependency as well. This gives us very pleasant build times for both xdp.h and struct netdev_rx_queue changes. I'm sending this for bpf-next because I think it'd be easiest if it goes in there, and then bpf-next gets flushed soon after? I can also make a branch on merge-base for net-next and bpf-next.. v2: - build fix - reorder some includes v1: https://lore.kernel.org/all/20230802003246.2153774-1-kuba@kernel.org/ ==================== Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
This commit is contained in:
@@ -90,6 +90,7 @@
|
||||
#include <net/tls.h>
|
||||
#endif
|
||||
#include <net/ip6_route.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "bonding_priv.h"
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <net/xdp.h>
|
||||
#include <uapi/linux/bpf.h>
|
||||
|
||||
#include "ena_com.h"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/ptp_clock_kernel.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#define TSNEP "tsnep"
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/fsl/mc.h>
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <net/devlink.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include <soc/fsl/dpaa2-io.h>
|
||||
#include <soc/fsl/dpaa2-fd.h>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/phylink.h>
|
||||
#include <linux/dim.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "enetc_hw.h"
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/timecounter.h>
|
||||
#include <dt-bindings/firmware/imx/rsrc.h>
|
||||
#include <linux/firmware/imx/sci.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#if defined(CONFIG_M523x) || defined(CONFIG_M527x) || defined(CONFIG_M528x) || \
|
||||
defined(CONFIG_M520x) || defined(CONFIG_M532x) || defined(CONFIG_ARM) || \
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/u64_stats_sync.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
/* Tx descriptor size */
|
||||
#define FUNETH_SQE_SIZE 64U
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/u64_stats_sync.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "gve_desc.h"
|
||||
#include "gve_desc_dqo.h"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/bitfield.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "igc_hw.h"
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <net/pkt_cls.h>
|
||||
#include <net/pkt_sched.h>
|
||||
#include <net/switchdev.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include <vcap_api.h>
|
||||
#include <vcap_api_client.h>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <net/checksum.h>
|
||||
#include <net/ip6_checksum.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include <net/mana/mana.h>
|
||||
#include <net/mana/mana_auxiliary.h>
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/reset.h>
|
||||
#include <net/page_pool.h>
|
||||
#include <net/xdp.h>
|
||||
#include <uapi/linux/bpf.h>
|
||||
|
||||
struct stmmac_resources {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#ifndef DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_
|
||||
#define DRIVERS_NET_ETHERNET_TI_CPSW_PRIV_H_
|
||||
|
||||
#include <net/xdp.h>
|
||||
#include <uapi/linux/bpf.h>
|
||||
|
||||
#include "davinci_cpdma.h"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <linux/hyperv.h>
|
||||
#include <linux/rndis.h>
|
||||
#include <linux/jhash.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
/* RSS related */
|
||||
#define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203 /* query only */
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/rtnetlink.h>
|
||||
#include <net/sock.h>
|
||||
#include <net/xdp.h>
|
||||
#include <linux/virtio_net.h>
|
||||
#include <linux/skb_array.h>
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <net/route.h>
|
||||
#include <net/xdp.h>
|
||||
#include <net/net_failover.h>
|
||||
#include <net/netdev_rx_queue.h>
|
||||
|
||||
static int napi_weight = NAPI_POLL_WEIGHT;
|
||||
module_param(napi_weight, int, 0444);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
@@ -782,32 +785,6 @@ bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index, u32 flow_id,
|
||||
#endif
|
||||
#endif /* CONFIG_RPS */
|
||||
|
||||
/* This structure contains an instance of an RX queue. */
|
||||
struct netdev_rx_queue {
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
#ifdef CONFIG_RPS
|
||||
struct rps_map __rcu *rps_map;
|
||||
struct rps_dev_flow_table __rcu *rps_flow_table;
|
||||
#endif
|
||||
struct kobject kobj;
|
||||
struct net_device *dev;
|
||||
netdevice_tracker dev_tracker;
|
||||
|
||||
#ifdef CONFIG_XDP_SOCKETS
|
||||
struct xsk_buff_pool *pool;
|
||||
#endif
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
* RX queue sysfs structures and functions.
|
||||
*/
|
||||
struct rx_queue_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct netdev_rx_queue *queue, char *buf);
|
||||
ssize_t (*store)(struct netdev_rx_queue *queue,
|
||||
const char *buf, size_t len);
|
||||
};
|
||||
|
||||
/* XPS map type and offset of the xps map within net_device->xps_maps[]. */
|
||||
enum xps_map_type {
|
||||
XPS_CPUS = 0,
|
||||
@@ -1654,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
|
||||
*
|
||||
@@ -3828,24 +3799,6 @@ static inline int netif_set_real_num_rx_queues(struct net_device *dev,
|
||||
int netif_set_real_num_queues(struct net_device *dev,
|
||||
unsigned int txq, unsigned int rxq);
|
||||
|
||||
static inline struct netdev_rx_queue *
|
||||
__netif_get_rx_queue(struct net_device *dev, unsigned int rxq)
|
||||
{
|
||||
return dev->_rx + rxq;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
static inline unsigned int get_netdev_rx_queue_index(
|
||||
struct netdev_rx_queue *queue)
|
||||
{
|
||||
struct net_device *dev = queue->dev;
|
||||
int index = queue - dev->_rx;
|
||||
|
||||
BUG_ON(index >= dev->num_rx_queues);
|
||||
return index;
|
||||
}
|
||||
#endif
|
||||
|
||||
int netif_get_num_default_rss_queues(void);
|
||||
|
||||
void dev_kfree_skb_irq_reason(struct sk_buff *skb, enum skb_drop_reason reason);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#ifndef _MANA_H
|
||||
#define _MANA_H
|
||||
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "gdma.h"
|
||||
#include "hw_channel.h"
|
||||
|
||||
|
||||
53
include/net/netdev_rx_queue.h
Normal file
53
include/net/netdev_rx_queue.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_NETDEV_RX_QUEUE_H
|
||||
#define _LINUX_NETDEV_RX_QUEUE_H
|
||||
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
/* This structure contains an instance of an RX queue. */
|
||||
struct netdev_rx_queue {
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
#ifdef CONFIG_RPS
|
||||
struct rps_map __rcu *rps_map;
|
||||
struct rps_dev_flow_table __rcu *rps_flow_table;
|
||||
#endif
|
||||
struct kobject kobj;
|
||||
struct net_device *dev;
|
||||
netdevice_tracker dev_tracker;
|
||||
|
||||
#ifdef CONFIG_XDP_SOCKETS
|
||||
struct xsk_buff_pool *pool;
|
||||
#endif
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
* RX queue sysfs structures and functions.
|
||||
*/
|
||||
struct rx_queue_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct netdev_rx_queue *queue, char *buf);
|
||||
ssize_t (*store)(struct netdev_rx_queue *queue,
|
||||
const char *buf, size_t len);
|
||||
};
|
||||
|
||||
static inline struct netdev_rx_queue *
|
||||
__netif_get_rx_queue(struct net_device *dev, unsigned int rxq)
|
||||
{
|
||||
return dev->_rx + rxq;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SYSFS
|
||||
static inline unsigned int
|
||||
get_netdev_rx_queue_index(struct netdev_rx_queue *queue)
|
||||
{
|
||||
struct net_device *dev = queue->dev;
|
||||
int index = queue - dev->_rx;
|
||||
|
||||
BUG_ON(index >= dev->num_rx_queues);
|
||||
return index;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -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__ */
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/poison.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "disasm.h"
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/sock_diag.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <net/netdev_rx_queue.h>
|
||||
#include <net/xdp.h>
|
||||
#include <net/netfilter/nf_bpf_link.h>
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/prandom.h>
|
||||
#include <linux/once_lite.h>
|
||||
#include <net/netdev_rx_queue.h>
|
||||
|
||||
#include "dev.h"
|
||||
#include "net-sysfs.h"
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_net.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <net/netdev_rx_queue.h>
|
||||
|
||||
#include "dev.h"
|
||||
#include "net-sysfs.h"
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/vmalloc.h>
|
||||
#include <net/xdp_sock_drv.h>
|
||||
#include <net/busy_poll.h>
|
||||
#include <net/netdev_rx_queue.h>
|
||||
#include <net/xdp.h>
|
||||
|
||||
#include "xsk_queue.h"
|
||||
|
||||
Reference in New Issue
Block a user