mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 09:28:44 -04:00
net-sysfs: add support for device-specific rx queue sysfs attributes
Extend existing support for netdevice receive queue sysfs attributes to permit a device-specific attribute group. Initial use case for this support will be to allow the virtio-net device to export per-receive queue mergeable receive buffer size. Signed-off-by: Michael Dalton <mwdalton@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ab7db91705
commit
a953be53ce
@@ -668,15 +668,28 @@ extern struct rps_sock_flow_table __rcu *rps_sock_flow_table;
|
||||
bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index, u32 flow_id,
|
||||
u16 filter_id);
|
||||
#endif
|
||||
#endif /* CONFIG_RPS */
|
||||
|
||||
/* This structure contains an instance of an RX queue. */
|
||||
struct netdev_rx_queue {
|
||||
#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;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
#endif /* CONFIG_RPS */
|
||||
|
||||
/*
|
||||
* RX queue sysfs structures and functions.
|
||||
*/
|
||||
struct rx_queue_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct netdev_rx_queue *queue,
|
||||
struct rx_queue_attribute *attr, char *buf);
|
||||
ssize_t (*store)(struct netdev_rx_queue *queue,
|
||||
struct rx_queue_attribute *attr, const char *buf, size_t len);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_XPS
|
||||
/*
|
||||
@@ -1313,7 +1326,7 @@ struct net_device {
|
||||
unicast) */
|
||||
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
#ifdef CONFIG_SYSFS
|
||||
struct netdev_rx_queue *_rx;
|
||||
|
||||
/* Number of RX queues allocated at register_netdev() time */
|
||||
@@ -1424,6 +1437,8 @@ struct net_device {
|
||||
struct device dev;
|
||||
/* space for optional device, statistics, and wireless sysfs groups */
|
||||
const struct attribute_group *sysfs_groups[4];
|
||||
/* space for optional per-rx queue attributes */
|
||||
const struct attribute_group *sysfs_rx_queue_group;
|
||||
|
||||
/* rtnetlink link ops */
|
||||
const struct rtnl_link_ops *rtnl_link_ops;
|
||||
@@ -2375,7 +2390,7 @@ static inline bool netif_is_multiqueue(const struct net_device *dev)
|
||||
|
||||
int netif_set_real_num_tx_queues(struct net_device *dev, unsigned int txq);
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
#ifdef CONFIG_SYSFS
|
||||
int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq);
|
||||
#else
|
||||
static inline int netif_set_real_num_rx_queues(struct net_device *dev,
|
||||
@@ -2394,7 +2409,7 @@ static inline int netif_copy_real_num_queues(struct net_device *to_dev,
|
||||
from_dev->real_num_tx_queues);
|
||||
if (err)
|
||||
return err;
|
||||
#ifdef CONFIG_RPS
|
||||
#ifdef CONFIG_SYSFS
|
||||
return netif_set_real_num_rx_queues(to_dev,
|
||||
from_dev->real_num_rx_queues);
|
||||
#else
|
||||
@@ -2402,6 +2417,18 @@ static inline int netif_copy_real_num_queues(struct net_device *to_dev,
|
||||
#endif
|
||||
}
|
||||
|
||||
#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
|
||||
|
||||
#define DEFAULT_MAX_NUM_RSS_QUEUES (8)
|
||||
int netif_get_num_default_rss_queues(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user