e1000: Link NAPI instances to queues and IRQs
authorJoe Damato <jdamato@fastly.com>
Mon, 30 Sep 2024 17:12:32 +0000 (17:12 +0000)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Tue, 8 Oct 2024 22:22:32 +0000 (15:22 -0700)
Add support for netdev-genl, allowing users to query IRQ, NAPI, and queue
information.

After this patch is applied, note the IRQ assigned to my NIC:

$ cat /proc/interrupts | grep enp0s8 | cut -f1 --delimiter=':'
 18

Note the output from the cli:

$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
                         --dump napi-get --json='{"ifindex": 2}'
[{'id': 513, 'ifindex': 2, 'irq': 18}]

This device supports only 1 rx and 1 tx queue, so querying that:

$ ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \
                         --dump queue-get --json='{"ifindex": 2}'
[{'id': 0, 'ifindex': 2, 'napi-id': 513, 'type': 'rx'},
 {'id': 0, 'ifindex': 2, 'napi-id': 513, 'type': 'tx'}]

Signed-off-by: Joe Damato <jdamato@fastly.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/e1000/e1000_main.c

index ab7ae418d294856de783970320577729de2fc9d5..4de9b156b2bea012358e6b4076f4fa7ceb9fb2e9 100644 (file)
@@ -513,6 +513,8 @@ void e1000_down(struct e1000_adapter *adapter)
         */
        netif_carrier_off(netdev);
 
+       netif_queue_set_napi(netdev, 0, NETDEV_QUEUE_TYPE_RX, NULL);
+       netif_queue_set_napi(netdev, 0, NETDEV_QUEUE_TYPE_TX, NULL);
        napi_disable(&adapter->napi);
 
        e1000_irq_disable(adapter);
@@ -1392,7 +1394,10 @@ int e1000_open(struct net_device *netdev)
        /* From here on the code is the same as e1000_up() */
        clear_bit(__E1000_DOWN, &adapter->flags);
 
+       netif_napi_set_irq(&adapter->napi, adapter->pdev->irq);
        napi_enable(&adapter->napi);
+       netif_queue_set_napi(netdev, 0, NETDEV_QUEUE_TYPE_RX, &adapter->napi);
+       netif_queue_set_napi(netdev, 0, NETDEV_QUEUE_TYPE_TX, &adapter->napi);
 
        e1000_irq_enable(adapter);