1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_NETDEV_RX_QUEUE_H
3 #define _LINUX_NETDEV_RX_QUEUE_H
5 #include <linux/kobject.h>
6 #include <linux/netdevice.h>
7 #include <linux/sysfs.h>
9 #include <net/page_pool/types.h>
11 /* This structure contains an instance of an RX queue. */
12 struct netdev_rx_queue
{
13 struct xdp_rxq_info xdp_rxq
;
15 struct rps_map __rcu
*rps_map
;
16 struct rps_dev_flow_table __rcu
*rps_flow_table
;
19 struct net_device
*dev
;
20 netdevice_tracker dev_tracker
;
22 #ifdef CONFIG_XDP_SOCKETS
23 struct xsk_buff_pool
*pool
;
25 /* NAPI instance for the queue
26 * Readers and writers must hold RTNL
28 struct napi_struct
*napi
;
29 struct pp_memory_provider_params mp_params
;
30 } ____cacheline_aligned_in_smp
;
33 * RX queue sysfs structures and functions.
35 struct rx_queue_attribute
{
36 struct attribute attr
;
37 ssize_t (*show
)(struct netdev_rx_queue
*queue
, char *buf
);
38 ssize_t (*store
)(struct netdev_rx_queue
*queue
,
39 const char *buf
, size_t len
);
42 static inline struct netdev_rx_queue
*
43 __netif_get_rx_queue(struct net_device
*dev
, unsigned int rxq
)
45 return dev
->_rx
+ rxq
;
48 static inline unsigned int
49 get_netdev_rx_queue_index(struct netdev_rx_queue
*queue
)
51 struct net_device
*dev
= queue
->dev
;
52 int index
= queue
- dev
->_rx
;
54 BUG_ON(index
>= dev
->num_rx_queues
);
58 int netdev_rx_queue_restart(struct net_device
*dev
, unsigned int rxq
);