> -----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);

Reply via email to