> -----Original Message-----
> From: Jakub Kicinski <[email protected]>
> Sent: Saturday, June 27, 2026 12:27 AM
> To: Loktionov, Aleksandr <[email protected]>
> Cc: [email protected]; Nguyen, Anthony L
> <[email protected]>; [email protected]
> Subject: Re: [PATCH iwl-next v5 2/2] ice: implement symmetric RSS hash
> configuration
>
> On Fri, 26 Jun 2026 07:47:30 +0200 Aleksandr Loktionov wrote:
> > - /* Update the VSI's hash function */
> > - if (rxfh->input_xfrm & RXH_XFRM_SYM_XOR)
> > - hfunc = ICE_AQ_VSI_Q_OPT_RSS_HASH_SYM_TPLZ;
> > + /* Handle RSS symmetric hash transformation */
> > + if (rxfh->input_xfrm != RXH_XFRM_NO_CHANGE) {
> > + u8 new_hfunc;
>
> I think this is the very bad part. Please extract it out and send it
> as a fix to net. Looks like any changes to RSS confing on ice randomly
> enable xfrm sym. I isolated it to the ntuple.py test which just
> changes the indir table, and the driver says:
>
> ice 0000:e1:00.0 ens1f0np0: Hash function set to: Symmetric Toeplitz
>
Good day, Jakub
I understood on TEID; I will drop the ethtool core patch.
One question before respinning the ice feature patch: ice GTP RSS profiles
include TEID in the hardware hash fields. Since TEID is not generally
symmetric across UL/DL, should the driver:
1. report RXH_GTP_TEID honestly and let the core reject symmetric-xor
when GTP flow types are part of the preflight check;
2. hide RXH_GTP_TEID while symmetric-xor is enabled, even though that
misrepresents the hardware hash input;
3. reject symmetric-xor for configurations where GTP profiles include
TEID; or
4. change/program the ice GTP profile, if possible, to exclude TEID
under symmetric-xor?
My preference is (1) or (3), but I do not want to encode the wrong uAPI
semantics.
> Which we never asked for. I drafted this before seeing your reply:
>
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -3692,10 +3692,10 @@ ice_set_rxfh(struct net_device *netdev, struct
> ethtool_rxfh_param *rxfh,
> struct netlink_ext_ack *extack) {
> struct ice_netdev_priv *np = netdev_priv(netdev);
> - u8 hfunc = ICE_AQ_VSI_Q_OPT_RSS_HASH_TPLZ;
> struct ice_vsi *vsi = np->vsi;
> struct ice_pf *pf = vsi->back;
> struct device *dev;
> + u8 hfunc;
> int err;
>
> dev = ice_pf_to_dev(pf);
> @@ -3714,9 +3714,12 @@ ice_set_rxfh(struct net_device *netdev, struct
> ethtool_rxfh_param *rxfh,
> return -EOPNOTSUPP;
> }
>
> - /* Update the VSI's hash function */
> - if (rxfh->input_xfrm & RXH_XFRM_SYM_XOR)
> + if (rxfh->input_xfrm == RXH_XFRM_NO_CHANGE)
> + hfunc = vsi->rss_hfunc;
> + else if (rxfh->input_xfrm & RXH_XFRM_SYM_XOR)
> hfunc = ICE_AQ_VSI_Q_OPT_RSS_HASH_SYM_TPLZ;
> + else /* input_xfrm == 0; core rejects any other value */
> + hfunc = ICE_AQ_VSI_Q_OPT_RSS_HASH_TPLZ;
>
> err = ice_set_rss_hfunc(vsi, hfunc);