mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-15 09:44:21 -05:00
We'll need to pass extra parameters when allocating a queue for memory providers. Define a new structure for queue configurations, and pass it to qapi callbacks. It's empty for now, actual parameters will be added in following patches. Configurations should persist across resets, and for that they're default-initialised on device registration and stored in struct netdev_rx_queue. We also add a new qapi callback for defaulting a given config. It must be implemented if a driver wants to use queue configs and is optional otherwise. Suggested-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
/* 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>
|
|
#include <net/page_pool/types.h>
|
|
#include <net/netdev_queues.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;
|
|
const struct attribute_group **groups;
|
|
struct net_device *dev;
|
|
netdevice_tracker dev_tracker;
|
|
|
|
/* All fields below are "ops protected",
|
|
* see comment about net_device::lock
|
|
*/
|
|
#ifdef CONFIG_XDP_SOCKETS
|
|
struct xsk_buff_pool *pool;
|
|
#endif
|
|
struct napi_struct *napi;
|
|
struct netdev_queue_config qcfg;
|
|
struct pp_memory_provider_params mp_params;
|
|
} ____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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq);
|
|
|
|
#endif
|