Add support to set NAPI threaded for individual NAPI

A net device has a threaded sysctl that can be used to enable threaded
NAPI polling on all of the NAPI contexts under that device. Allow
enabling threaded NAPI polling at individual NAPI level using netlink.

Extend the netlink operation `napi-set` and allow setting the threaded
attribute of a NAPI. This will enable the threaded polling on a NAPI
context.

Add a test in `nl_netdev.py` that verifies various cases of threaded
NAPI being set at NAPI and at device level.

Tested
 ./tools/testing/selftests/net/nl_netdev.py
 TAP version 13
 1..7
 ok 1 nl_netdev.empty_check
 ok 2 nl_netdev.lo_check
 ok 3 nl_netdev.page_pool_check
 ok 4 nl_netdev.napi_list_check
 ok 5 nl_netdev.dev_set_threaded
 ok 6 nl_netdev.napi_set_threaded
 ok 7 nl_netdev.nsim_rxq_reset_down
 # Totals: pass:7 fail:0 xfail:0 xpass:0 skip:0 error:0

Signed-off-by: Samiullah Khawaja <skhawaja@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250710211203.3979655-1-skhawaja@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Samiullah Khawaja
2025-07-10 21:12:03 +00:00
committed by Jakub Kicinski
parent a44312d58e
commit 2677010e77
10 changed files with 162 additions and 7 deletions

View File

@@ -283,6 +283,14 @@ attribute-sets:
doc: The timeout, in nanoseconds, of how long to suspend irq
processing, if event polling finds events
type: uint
-
name: threaded
doc: Whether the NAPI is configured to operate in threaded polling
mode. If this is set to 1 then the NAPI context operates in
threaded polling mode.
type: uint
checks:
max: 1
-
name: xsk-info
attributes: []
@@ -694,6 +702,7 @@ operations:
- defer-hard-irqs
- gro-flush-timeout
- irq-suspend-timeout
- threaded
dump:
request:
attributes:
@@ -746,6 +755,7 @@ operations:
- defer-hard-irqs
- gro-flush-timeout
- irq-suspend-timeout
- threaded
-
name: bind-tx
doc: Bind dmabuf to netdev for TX