Commit c6b8cd69 authored by Joe Damato's avatar Joe Damato Committed by Tony Nguyen
Browse files

e1000e: Link NAPI instances to queues and IRQs



Add support for netdev-genl, allowing users to query IRQ, NAPI, and queue
information.

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

$ cat /proc/interrupts | grep ens | cut -f1 --delimiter=':'
 50
 51
 52

While e1000e allocates 3 IRQs (RX, TX, and other), it looks like e1000e
only has a single NAPI, so I've associated the NAPI with the RX IRQ (50
on my system, seen above).

Note the output from the cli:

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

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': 145, 'type': 'rx'},
 {'id': 0, 'ifindex': 2, 'napi-id': 145, 'type': 'tx'}]

Signed-off-by: default avatarJoe Damato <jdamato@fastly.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Acked-by: default avatarVitaly Lifshits <vitaly.lifshits@intel.com>
Tested-by: default avatarAvigail Dahan <avigailx.dahan@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 0cab3b0f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -4607,6 +4607,7 @@ int e1000e_open(struct net_device *netdev)
	struct e1000_hw *hw = &adapter->hw;
	struct pci_dev *pdev = adapter->pdev;
	int err;
	int irq;

	/* disallow open during test */
	if (test_bit(__E1000_TESTING, &adapter->state))
@@ -4670,7 +4671,15 @@ int e1000e_open(struct net_device *netdev)
	/* From here on the code is the same as e1000e_up() */
	clear_bit(__E1000_DOWN, &adapter->state);

	if (adapter->int_mode == E1000E_INT_MODE_MSIX)
		irq = adapter->msix_entries[0].vector;
	else
		irq = adapter->pdev->irq;

	netif_napi_set_irq(&adapter->napi, 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);

@@ -4729,6 +4738,8 @@ int e1000e_close(struct net_device *netdev)
		netdev_info(netdev, "NIC Link is Down\n");
	}

	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);

	e1000e_free_tx_resources(adapter->tx_ring);