ena: Link queues to NAPIs

Link queues to NAPIs using the netdev-genl API so this information is
queryable.

$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
                         --dump queue-get --json='{"ifindex": 2}'

[{'id': 0, 'ifindex': 2, 'napi-id': 8201, 'type': 'rx'},
 {'id': 1, 'ifindex': 2, 'napi-id': 8202, 'type': 'rx'},
 {'id': 2, 'ifindex': 2, 'napi-id': 8203, 'type': 'rx'},
 {'id': 3, 'ifindex': 2, 'napi-id': 8204, 'type': 'rx'},
 {'id': 4, 'ifindex': 2, 'napi-id': 8205, 'type': 'rx'},
 {'id': 5, 'ifindex': 2, 'napi-id': 8206, 'type': 'rx'},
 {'id': 6, 'ifindex': 2, 'napi-id': 8207, 'type': 'rx'},
 {'id': 7, 'ifindex': 2, 'napi-id': 8208, 'type': 'rx'},
 {'id': 0, 'ifindex': 2, 'napi-id': 8201, 'type': 'tx'},
 {'id': 1, 'ifindex': 2, 'napi-id': 8202, 'type': 'tx'},
 {'id': 2, 'ifindex': 2, 'napi-id': 8203, 'type': 'tx'},
 {'id': 3, 'ifindex': 2, 'napi-id': 8204, 'type': 'tx'},
 {'id': 4, 'ifindex': 2, 'napi-id': 8205, 'type': 'tx'},
 {'id': 5, 'ifindex': 2, 'napi-id': 8206, 'type': 'tx'},
 {'id': 6, 'ifindex': 2, 'napi-id': 8207, 'type': 'tx'},
 {'id': 7, 'ifindex': 2, 'napi-id': 8208, 'type': 'tx'}]

Signed-off-by: Joe Damato <jdamato@fastly.com>
Reviewed-by: David Arinzon <darinzon@amazon.com>
Link: https://patch.msgid.link/20241002001331.65444-3-jdamato@fastly.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Joe Damato 2024-10-02 00:13:28 +00:00 committed by Jakub Kicinski
parent 989867846f
commit 888634377f

View File

@ -1821,20 +1821,40 @@ static void ena_napi_disable_in_range(struct ena_adapter *adapter,
int first_index,
int count)
{
struct napi_struct *napi;
int i;
for (i = first_index; i < first_index + count; i++)
napi_disable(&adapter->ena_napi[i].napi);
for (i = first_index; i < first_index + count; i++) {
napi = &adapter->ena_napi[i].napi;
if (!ENA_IS_XDP_INDEX(adapter, i)) {
/* This API is supported for non-XDP queues only */
netif_queue_set_napi(adapter->netdev, i,
NETDEV_QUEUE_TYPE_TX, NULL);
netif_queue_set_napi(adapter->netdev, i,
NETDEV_QUEUE_TYPE_RX, NULL);
}
napi_disable(napi);
}
}
static void ena_napi_enable_in_range(struct ena_adapter *adapter,
int first_index,
int count)
{
struct napi_struct *napi;
int i;
for (i = first_index; i < first_index + count; i++)
napi_enable(&adapter->ena_napi[i].napi);
for (i = first_index; i < first_index + count; i++) {
napi = &adapter->ena_napi[i].napi;
napi_enable(napi);
if (!ENA_IS_XDP_INDEX(adapter, i)) {
/* This API is supported for non-XDP queues only */
netif_queue_set_napi(adapter->netdev, i,
NETDEV_QUEUE_TYPE_RX, napi);
netif_queue_set_napi(adapter->netdev, i,
NETDEV_QUEUE_TYPE_TX, napi);
}
}
}
/* Configure the Rx forwarding */