The ice driver has advertised symmetric RSS support via supported_input_xfrm since the capability was added, but ice_set_rxfh() ignored the input_xfrm parameter entirely, so enabling symmetric hashing had no actual effect.
This series fixes that. Patch 1 extends the ethtool core so that drivers hashing GTP flows on TEID can report it honestly without blocking symmetric-xor configuration. Patch 2 wires up the ice driver. The need for patch 1 surfaced because GTP flow profiles in ice always include TEID in the hash. ethtool_check_flow_types() calls get_rxfh_fields() for every hashable flow type before allowing symmetric-xor; ethtool_rxfh_config_is_sym() rejected any bitmap containing RXH_GTP_TEID since it has no src/dst counterpart. TEID is the same value in both tunnel directions, so this rejection is incorrect: including it does not break symmetry. Rather than hiding TEID from the reported fields (which would silently misrepresent hardware behaviour), patch 1 fixes the validator, and patch 2 reports TEID honestly. Tested with tools/testing/selftests/drivers/net/hw/rss_input_xfrm.py on an E810 card running kernel 6.19-rc8. --- v2 -> v3: - Split into 2 patches: ethtool core fix separate from driver change - Drop the RXH_GTP_TEID stripping workaround from the driver; instead fix ethtool_rxfh_config_is_sym() to accept TEID as intrinsically symmetric (patch 1) - Fix ice_get_rxfh_fields(): the v2 unconditional assignment "nfc->data = ICE_RSS_ALLOWED_FIELDS" clobbered fields set earlier in the same function; replaced with pair-completion using |= so only the missing half of a partial pair is filled in - Remove ICE_RSS_ALLOWED_FIELDS define (no longer needed) - Report RXH_GTP_TEID honestly for GTP flow types v1 -> v2: - Preserve valid symmetric RSS fields instead of overwriting nfc->data unconditionally Aleksandr Loktionov (2): ethtool: treat RXH_GTP_TEID as intrinsically symmetric ice: implement symmetric RSS hash configuration drivers/net/ethernet/intel/ice/ice_ethtool.c | 48 +++++++++++++--- drivers/net/ethernet/intel/ice/ice_lib.c | 7 ++- drivers/net/ethernet/intel/ice/ice_lib.h | 1 + net/ethtool/common.c | 3 + 4 files changed, 47 insertions(+), 12 deletions(-) -- 2.43.0
