netdev: reshuffle netif_napi_add() APIs to allow dropping weight
Most drivers should not have to worry about selecting the right weight for their NAPI instances and pass NAPI_POLL_WEIGHT. It'd be best if we didn't require the argument at all and selected the default internally. This change prepares the ground for such reshuffling, allowing for a smooth transition. The following API should remain after the next release cycle: netif_napi_add() netif_napi_add_weight() netif_napi_add_tx() netif_napi_add_tx_weight() Where the _weight() variants take an explicit weight argument. I opted for a _weight() suffix rather than a __ prefix, because we use __ in places to mean that caller needs to also issue a synchronize_net() call. Signed-off-by: Jakub Kicinski <kuba@kernel.org> Link: https://lore.kernel.org/r/20220502232703.396351-1-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Родитель
7d4e91e064
Коммит
58caed3dac
|
@ -2499,37 +2499,53 @@ static inline void *netdev_priv(const struct net_device *dev)
|
|||
*/
|
||||
#define NAPI_POLL_WEIGHT 64
|
||||
|
||||
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight);
|
||||
|
||||
/**
|
||||
* netif_napi_add - initialize a NAPI context
|
||||
* @dev: network device
|
||||
* @napi: NAPI context
|
||||
* @poll: polling function
|
||||
* @weight: default weight
|
||||
* netif_napi_add() - initialize a NAPI context
|
||||
* @dev: network device
|
||||
* @napi: NAPI context
|
||||
* @poll: polling function
|
||||
* @weight: default weight
|
||||
*
|
||||
* netif_napi_add() must be used to initialize a NAPI context prior to calling
|
||||
* *any* of the other NAPI-related functions.
|
||||
*/
|
||||
void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight);
|
||||
static inline void
|
||||
netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
{
|
||||
netif_napi_add_weight(dev, napi, poll, weight);
|
||||
}
|
||||
|
||||
static inline void
|
||||
netif_napi_add_tx_weight(struct net_device *dev,
|
||||
struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int),
|
||||
int weight)
|
||||
{
|
||||
set_bit(NAPI_STATE_NO_BUSY_POLL, &napi->state);
|
||||
netif_napi_add_weight(dev, napi, poll, weight);
|
||||
}
|
||||
|
||||
#define netif_tx_napi_add netif_napi_add_tx_weight
|
||||
|
||||
/**
|
||||
* netif_tx_napi_add - initialize a NAPI context
|
||||
* @dev: network device
|
||||
* @napi: NAPI context
|
||||
* @poll: polling function
|
||||
* @weight: default weight
|
||||
* netif_napi_add_tx() - initialize a NAPI context to be used for Tx only
|
||||
* @dev: network device
|
||||
* @napi: NAPI context
|
||||
* @poll: polling function
|
||||
*
|
||||
* This variant of netif_napi_add() should be used from drivers using NAPI
|
||||
* to exclusively poll a TX queue.
|
||||
* This will avoid we add it into napi_hash[], thus polluting this hash table.
|
||||
*/
|
||||
static inline void netif_tx_napi_add(struct net_device *dev,
|
||||
static inline void netif_napi_add_tx(struct net_device *dev,
|
||||
struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int),
|
||||
int weight)
|
||||
int (*poll)(struct napi_struct *, int))
|
||||
{
|
||||
set_bit(NAPI_STATE_NO_BUSY_POLL, &napi->state);
|
||||
netif_napi_add(dev, napi, poll, weight);
|
||||
netif_napi_add_tx_weight(dev, napi, poll, NAPI_POLL_WEIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -6303,8 +6303,8 @@ int dev_set_threaded(struct net_device *dev, bool threaded)
|
|||
}
|
||||
EXPORT_SYMBOL(dev_set_threaded);
|
||||
|
||||
void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
void netif_napi_add_weight(struct net_device *dev, struct napi_struct *napi,
|
||||
int (*poll)(struct napi_struct *, int), int weight)
|
||||
{
|
||||
if (WARN_ON(test_and_set_bit(NAPI_STATE_LISTED, &napi->state)))
|
||||
return;
|
||||
|
@ -6337,7 +6337,7 @@ void netif_napi_add(struct net_device *dev, struct napi_struct *napi,
|
|||
if (dev->threaded && napi_kthread_create(napi))
|
||||
dev->threaded = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(netif_napi_add);
|
||||
EXPORT_SYMBOL(netif_napi_add_weight);
|
||||
|
||||
void napi_disable(struct napi_struct *n)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче