Nambiar, Amritha
2023-Aug-02 19:42 UTC
[PATCH bpf-next 2/3] net: move struct netdev_rx_queue out of netdevice.h
On 8/1/2023 5:32 PM, Jakub Kicinski wrote:> struct netdev_rx_queue is touched in only a few places > and having it defined in netdevice.h brings in the dependency > on xdp.h, because struct xdp_rxq_info gets embedded in > struct netdev_rx_queue. > > In prep for removal of xdp.h from netdevice.h move all > the netdev_rx_queue stuff to a new header. > > We could technically break the new header up to avoid > the sysfs.h include but it's so rarely included it > doesn't seem to be worth it at this point. > > Signed-off-by: Jakub Kicinski <kuba at kernel.org> > --- > CC: mst at redhat.com > CC: jasowang at redhat.com > CC: xuanzhuo at linux.alibaba.com > CC: ast at kernel.org > CC: daniel at iogearbox.net > CC: andrii at kernel.org > CC: martin.lau at linux.dev > CC: song at kernel.org > CC: yonghong.song at linux.dev > CC: john.fastabend at gmail.com > CC: kpsingh at kernel.org > CC: sdf at google.com > CC: haoluo at google.com > CC: jolsa at kernel.org > CC: bjorn at kernel.org > CC: magnus.karlsson at intel.com > CC: maciej.fijalkowski at intel.com > CC: jonathan.lemon at gmail.com > CC: hawk at kernel.org > CC: gregkh at linuxfoundation.org > CC: wangyufen at huawei.com > CC: virtualization at lists.linux-foundation.org > CC: bpf at vger.kernel.org > --- > drivers/net/virtio_net.c | 1 + > include/linux/netdevice.h | 44 ----------------------------- > include/net/netdev_rx_queue.h | 53 +++++++++++++++++++++++++++++++++++ > net/bpf/test_run.c | 1 + > net/core/dev.c | 1 + > net/core/net-sysfs.c | 1 + > net/xdp/xsk.c | 1 + > 7 files changed, 58 insertions(+), 44 deletions(-) > create mode 100644 include/net/netdev_rx_queue.h >Reviewed-by: Amritha Nambiar <amritha.nambiar at intel.com>> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 0db14f6b87d3..5bcfd69333ea 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -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); > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index 3800d0479698..5563c8a210b5 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -782,32 +782,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, > @@ -3828,24 +3802,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); > diff --git a/include/net/netdev_rx_queue.h b/include/net/netdev_rx_queue.h > new file mode 100644 > index 000000000000..cdcafb30d437 > --- /dev/null > +++ b/include/net/netdev_rx_queue.h > @@ -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 > diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c > index 7d47f53f20c1..4ed68141d9a3 100644 > --- a/net/bpf/test_run.c > +++ b/net/bpf/test_run.c > @@ -21,6 +21,7 @@ > #include <linux/sock_diag.h> > #include <linux/netfilter.h> > #include <net/xdp.h> > +#include <net/netdev_rx_queue.h> > #include <net/netfilter/nf_bpf_link.h> > > #define CREATE_TRACE_POINTS > diff --git a/net/core/dev.c b/net/core/dev.c > index 8e7d0cb540cd..1fee2372b633 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -151,6 +151,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" > diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c > index 15e3f4606b5f..fccaa5bac0ed 100644 > --- a/net/core/net-sysfs.c > +++ b/net/core/net-sysfs.c > @@ -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" > diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c > index 4f1e0599146e..82aaec1b079f 100644 > --- a/net/xdp/xsk.c > +++ b/net/xdp/xsk.c > @@ -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"