Message ID | 20250210-igb_irq-v1-1-bde078cdb9df@linutronix.de (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | igb: XDP/ZC follow up | expand |
On Mon, Feb 10, 2025 at 10:19:35AM +0100, Kurt Kanzenbach wrote: > Link IRQs to NAPI instances via netdev-genl API. This allows users to query > that information via netlink: > > |$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ > | --dump napi-get --json='{"ifindex": 2}' > |[{'defer-hard-irqs': 0, > | 'gro-flush-timeout': 0, > | 'id': 8204, > | 'ifindex': 2, > | 'irq': 127, > | 'irq-suspend-timeout': 0}, > | {'defer-hard-irqs': 0, > | 'gro-flush-timeout': 0, > | 'id': 8203, > | 'ifindex': 2, > | 'irq': 126, > | 'irq-suspend-timeout': 0}, > | {'defer-hard-irqs': 0, > | 'gro-flush-timeout': 0, > | 'id': 8202, > | 'ifindex': 2, > | 'irq': 125, > | 'irq-suspend-timeout': 0}, > | {'defer-hard-irqs': 0, > | 'gro-flush-timeout': 0, > | 'id': 8201, > | 'ifindex': 2, > | 'irq': 124, > | 'irq-suspend-timeout': 0}] > |$ cat /proc/interrupts | grep enp2s0 > |123: 0 1 IR-PCI-MSIX-0000:02:00.0 0-edge enp2s0 > |124: 0 7 IR-PCI-MSIX-0000:02:00.0 1-edge enp2s0-TxRx-0 > |125: 0 0 IR-PCI-MSIX-0000:02:00.0 2-edge enp2s0-TxRx-1 > |126: 0 5 IR-PCI-MSIX-0000:02:00.0 3-edge enp2s0-TxRx-2 > |127: 0 0 IR-PCI-MSIX-0000:02:00.0 4-edge enp2s0-TxRx-3 > > Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> > --- > drivers/net/ethernet/intel/igb/igb_main.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c > index d368b753a4675d01b5dfa50dee4cd218e6a5e14b..d4128d19cc08f62f95682069bb5ed9b8bbbf10cb 100644 > --- a/drivers/net/ethernet/intel/igb/igb_main.c > +++ b/drivers/net/ethernet/intel/igb/igb_main.c > @@ -947,6 +947,9 @@ static int igb_request_msix(struct igb_adapter *adapter) > q_vector); > if (err) > goto err_free; > + > + netif_napi_set_irq(&q_vector->napi, > + adapter->msix_entries[vector].vector); > } As far as I can tell, all paths that lead here hold RTNL: - power management (__igb_resume) - ethtool set_channels (igb_reinit_queues) - and regular ndo_open So: Reviewed-by: Joe Damato <jdamato@fastly.com>
On Mon, Feb 10, 2025 at 10:25:47AM -0800, Joe Damato wrote: > On Mon, Feb 10, 2025 at 10:19:35AM +0100, Kurt Kanzenbach wrote: > > Link IRQs to NAPI instances via netdev-genl API. This allows users to query > > that information via netlink: > > > > |$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ > > | --dump napi-get --json='{"ifindex": 2}' > > |[{'defer-hard-irqs': 0, > > | 'gro-flush-timeout': 0, > > | 'id': 8204, > > | 'ifindex': 2, > > | 'irq': 127, > > | 'irq-suspend-timeout': 0}, > > | {'defer-hard-irqs': 0, > > | 'gro-flush-timeout': 0, > > | 'id': 8203, > > | 'ifindex': 2, > > | 'irq': 126, > > | 'irq-suspend-timeout': 0}, > > | {'defer-hard-irqs': 0, > > | 'gro-flush-timeout': 0, > > | 'id': 8202, > > | 'ifindex': 2, > > | 'irq': 125, > > | 'irq-suspend-timeout': 0}, > > | {'defer-hard-irqs': 0, > > | 'gro-flush-timeout': 0, > > | 'id': 8201, > > | 'ifindex': 2, > > | 'irq': 124, > > | 'irq-suspend-timeout': 0}] > > |$ cat /proc/interrupts | grep enp2s0 > > |123: 0 1 IR-PCI-MSIX-0000:02:00.0 0-edge enp2s0 > > |124: 0 7 IR-PCI-MSIX-0000:02:00.0 1-edge enp2s0-TxRx-0 > > |125: 0 0 IR-PCI-MSIX-0000:02:00.0 2-edge enp2s0-TxRx-1 > > |126: 0 5 IR-PCI-MSIX-0000:02:00.0 3-edge enp2s0-TxRx-2 > > |127: 0 0 IR-PCI-MSIX-0000:02:00.0 4-edge enp2s0-TxRx-3 > > > > Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> > > --- > > drivers/net/ethernet/intel/igb/igb_main.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c > > index d368b753a4675d01b5dfa50dee4cd218e6a5e14b..d4128d19cc08f62f95682069bb5ed9b8bbbf10cb 100644 > > --- a/drivers/net/ethernet/intel/igb/igb_main.c > > +++ b/drivers/net/ethernet/intel/igb/igb_main.c > > @@ -947,6 +947,9 @@ static int igb_request_msix(struct igb_adapter *adapter) > > q_vector); > > if (err) > > goto err_free; > > + > > + netif_napi_set_irq(&q_vector->napi, > > + adapter->msix_entries[vector].vector); > > } > > As far as I can tell, all paths that lead here hold RTNL: A nit on my own comment, netif_napi_set_irq doesn't ASSERT_RTNL (but does hold net_device->lock); its the other functions in patch 2 that ASSERT_RTNL. My reviewed-by stands; just wanted to correct myself.
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index d368b753a4675d01b5dfa50dee4cd218e6a5e14b..d4128d19cc08f62f95682069bb5ed9b8bbbf10cb 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -947,6 +947,9 @@ static int igb_request_msix(struct igb_adapter *adapter) q_vector); if (err) goto err_free; + + netif_napi_set_irq(&q_vector->napi, + adapter->msix_entries[vector].vector); } igb_configure_msix(adapter);
Link IRQs to NAPI instances via netdev-genl API. This allows users to query that information via netlink: |$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml \ | --dump napi-get --json='{"ifindex": 2}' |[{'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8204, | 'ifindex': 2, | 'irq': 127, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8203, | 'ifindex': 2, | 'irq': 126, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8202, | 'ifindex': 2, | 'irq': 125, | 'irq-suspend-timeout': 0}, | {'defer-hard-irqs': 0, | 'gro-flush-timeout': 0, | 'id': 8201, | 'ifindex': 2, | 'irq': 124, | 'irq-suspend-timeout': 0}] |$ cat /proc/interrupts | grep enp2s0 |123: 0 1 IR-PCI-MSIX-0000:02:00.0 0-edge enp2s0 |124: 0 7 IR-PCI-MSIX-0000:02:00.0 1-edge enp2s0-TxRx-0 |125: 0 0 IR-PCI-MSIX-0000:02:00.0 2-edge enp2s0-TxRx-1 |126: 0 5 IR-PCI-MSIX-0000:02:00.0 3-edge enp2s0-TxRx-2 |127: 0 0 IR-PCI-MSIX-0000:02:00.0 4-edge enp2s0-TxRx-3 Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de> --- drivers/net/ethernet/intel/igb/igb_main.c | 3 +++ 1 file changed, 3 insertions(+)