mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 02:36:02 +00:00
ena: Link IRQs to NAPI instances
Link IRQs to NAPI instances with netif_napi_set_irq. This information can be queried with the netdev-genl API. Note that the ENA device appears to allocate an IRQ for management purposes which does not have a NAPI associated with it; this commit takes this into consideration to accurately construct a map between IRQs and NAPI instances. Compare the output of /proc/interrupts for my ena device with the output of netdev-genl after applying this patch: $ cat /proc/interrupts | grep enp55s0 | cut -f1 --delimiter=':' 94 95 96 97 98 99 100 101 $ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ --dump napi-get --json='{"ifindex": 2}' [{'id': 8208, 'ifindex': 2, 'irq': 101}, {'id': 8207, 'ifindex': 2, 'irq': 100}, {'id': 8206, 'ifindex': 2, 'irq': 99}, {'id': 8205, 'ifindex': 2, 'irq': 98}, {'id': 8204, 'ifindex': 2, 'irq': 97}, {'id': 8203, 'ifindex': 2, 'irq': 96}, {'id': 8202, 'ifindex': 2, 'irq': 95}, {'id': 8201, 'ifindex': 2, 'irq': 94}] Signed-off-by: Joe Damato <jdamato@fastly.com> Reviewed-by: David Arinzon <darinzon@amazon.com> Link: https://patch.msgid.link/20241002001331.65444-2-jdamato@fastly.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d07dceb91a
commit
989867846f
@ -1677,9 +1677,9 @@ static int ena_request_mgmnt_irq(struct ena_adapter *adapter)
|
||||
static int ena_request_io_irq(struct ena_adapter *adapter)
|
||||
{
|
||||
u32 io_queue_count = adapter->num_io_queues + adapter->xdp_num_queues;
|
||||
int rc = 0, i, k, irq_idx;
|
||||
unsigned long flags = 0;
|
||||
struct ena_irq *irq;
|
||||
int rc = 0, i, k;
|
||||
|
||||
if (!test_bit(ENA_FLAG_MSIX_ENABLED, &adapter->flags)) {
|
||||
netif_err(adapter, ifup, adapter->netdev,
|
||||
@ -1705,6 +1705,16 @@ static int ena_request_io_irq(struct ena_adapter *adapter)
|
||||
irq_set_affinity_hint(irq->vector, &irq->affinity_hint_mask);
|
||||
}
|
||||
|
||||
/* Now that IO IRQs have been successfully allocated map them to the
|
||||
* corresponding IO NAPI instance. Note that the mgmnt IRQ does not
|
||||
* have a NAPI, so care must be taken to correctly map IRQs to NAPIs.
|
||||
*/
|
||||
for (i = 0; i < io_queue_count; i++) {
|
||||
irq_idx = ENA_IO_IRQ_IDX(i);
|
||||
irq = &adapter->irq_tbl[irq_idx];
|
||||
netif_napi_set_irq(&adapter->ena_napi[i].napi, irq->vector);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
||||
err:
|
||||
|
Loading…
Reference in New Issue
Block a user