From: Jakub Kicinski Date: Tue, 24 Mar 2026 00:59:58 +0000 (-0700) Subject: Merge branch 'ethtool-dynamic-rss-context-indirection-table-resizing' X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1a8dd88469bf742fd5eda91cd8e0f720a983ec5a;p=thirdparty%2Fkernel%2Fstable.git Merge branch 'ethtool-dynamic-rss-context-indirection-table-resizing' Björn Töpel says: ==================== ethtool: Dynamic RSS context indirection table resizing Some NICs (e.g. bnxt) change their RSS indirection table size based on the queue count, because the hardware table is a shared resource. The ethtool core locks ctx->indir_size at context creation, so drivers have to reject channel changes when RSS contexts exist. This series adds resize helpers and wires them up in bnxt. It also adds tracking of the user provided indirection table size to the ethtool core. Patch 1 tracks the user-provided indirection table size (user_size) in ctx->indir_user_size for non-default RSS contexts and in dev->ethtool->rss_indir_user_size for context 0. It is set when the indirection table is configured via netlink or ioctl, and cleared to zero on reset-to-default. IFF_RXFH_CONFIGURED is removed, and replaced with rss_indir_user_size. The flag is redundant now that user_size captures the same information. Patch 2 adds core resize helpers: ethtool_rxfh_indir_can_resize() - read-only validation for context 0 ethtool_rxfh_indir_resize() - fold/unfold context 0 table in place ethtool_rxfh_ctxs_can_resize() - validate all non-default contexts ethtool_rxfh_ctxs_resize() - resize all non-default contexts, with locking and RSS_NTF notifications Patch 3 uses the resize helpers in bnxt_set_channels(). Patch 4 adds HW tests in rss_drv.py (devices without dynamic table sizing are skipped): resize_periodic - fold/unfold with a non-default [3,2,1,0] sub-table (user_size=4), verifying exact content preservation (main + ctx) resize_below_user_size_reject - periodic sub-table with user_size between big and small device table sizes; verifies that shrinking below user_size is rejected even when the table is periodic (main + ctx) resize_nonperiodic_reject - non-periodic table blocks channel reduction, with an extra periodic context to exercise multi-context validation (main + ctx) resize_nonperiodic_no_corruption - failed resize leaves table contents and channel count unchanged (main + ctx) Running the tests: # On real hardware sudo NETIF=eth0 ./rss_drv.py ==================== Link: https://patch.msgid.link/20260320085826.1957255-1-bjorn@kernel.org Signed-off-by: Jakub Kicinski --- 1a8dd88469bf742fd5eda91cd8e0f720a983ec5a