* RE: [Intel-wired-lan] [PATCH iwl-net v2 0/1] ice: Fix persistent failure in ice_get_rxfh
2025-12-13 0:22 ` Cody Haas
@ 2025-12-15 8:51 ` Loktionov, Aleksandr
2025-12-15 13:18 ` Przemek Kitszel
2026-01-15 16:26 ` [Intel-wired-lan] " Rinitha, SX
2 siblings, 0 replies; 6+ messages in thread
From: Loktionov, Aleksandr @ 2025-12-15 8:51 UTC (permalink / raw)
To: Haas, Cody, intel-wired-lan@lists.osuosl.org
Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, andrew+netdev@lunn.ch,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
netdev@vger.kernel.org, Haas, Cody
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf
> Of Cody Haas
> Sent: Saturday, December 13, 2025 1:22 AM
> To: intel-wired-lan@lists.osuosl.org
> Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>; andrew+netdev@lunn.ch;
> davem@davemloft.net; kuba@kernel.org; pabeni@redhat.com;
> netdev@vger.kernel.org; Haas, Cody <chaas@riotgames.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net v2 0/1] ice: Fix persistent
> failure in ice_get_rxfh
>
> Several ioctl functions have the ability to call ice_get_rxfh, however
> all of these ioctl functions do not provide all of the expected
> information in ethtool_rxfh_param. For example, ethtool_get_rxfh_indir
> does not provide an rss_key. This previously caused
> ethtool_get_rxfh_indir to always fail with -EINVAL.
>
> This change draws inspiration from i40e_get_rss to handle this
> situation, by only calling the appropriate rss helpers when the
> necessary information has been provided via ethtool_rxfh_param.
>
> Fixes: b66a972abb6b ("ice: Refactor ice_set/get_rss into LUT and key
> specific functions")
> Signed-off-by: Cody Haas <chaas@riotgames.com>
> Closes: https://lore.kernel.org/intel-wired-lan/CAH7f-
> UKkJV8MLY7zCdgCrGE55whRhbGAXvgkDnwgiZ9gUZT7_w@mail.gmail.com/
> ---
> drivers/net/ethernet/intel/ice/ice.h | 1 +
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 6 +----
> drivers/net/ethernet/intel/ice/ice_main.c | 28
> ++++++++++++++++++++
> 3 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice.h
> b/drivers/net/ethernet/intel/ice/ice.h
> index c9104b13e1d2..87f4098324ed 100644
> --- a/drivers/net/ethernet/intel/ice/ice.h
> +++ b/drivers/net/ethernet/intel/ice/ice.h
> @@ -953,6 +953,7 @@ void ice_map_xdp_rings(struct ice_vsi *vsi); int
> ice_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
> u32 flags);
> +int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16
> lut_size);
> int ice_set_rss_lut(struct ice_vsi *vsi, u8 *lut, u16 lut_size); int
> ice_get_rss_lut(struct ice_vsi *vsi, u8 *lut, u16 lut_size); int
> ice_set_rss_key(struct ice_vsi *vsi, u8 *seed); diff --git
> a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index b0805704834d..a5c139cc536d 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -3649,11 +3649,7 @@ ice_get_rxfh(struct net_device *netdev, struct
> ethtool_rxfh_param *rxfh)
> if (!lut)
> return -ENOMEM;
>
> - err = ice_get_rss_key(vsi, rxfh->key);
> - if (err)
> - goto out;
> -
> - err = ice_get_rss_lut(vsi, lut, vsi->rss_table_size);
> + err = ice_get_rss(vsi, rxfh->key, lut, vsi->rss_table_size);
> if (err)
> goto out;
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
> b/drivers/net/ethernet/intel/ice/ice_main.c
> index b084839eb811..c653029f07c1 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -8072,6 +8072,34 @@ int ice_get_rss_key(struct ice_vsi *vsi, u8
> *seed)
> return status;
> }
>
> +/**
> + * ice_get_rss - Get RSS LUT and/or key
> + * @vsi: Pointer to VSI structure
> + * @seed: Buffer to store the key in
> + * @lut: Buffer to store the lookup table entries
> + * @lut_size: Size of buffer to store the lookup table entries
> + *
> + * Returns 0 on success, negative on failure */ int
> ice_get_rss(struct
> +ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size) {
> + int err;
> +
> + if (seed) {
> + err = ice_get_rss_key(vsi, seed);
> + if (err)
> + return err;
> + }
> +
> + if (lut) {
> + err = ice_get_rss_lut(vsi, lut, lut_size);
> + if (err)
> + return err;
> + }
> +
> + return 0;
> +}
> +
> /**
> * ice_set_rss_hfunc - Set RSS HASH function
> * @vsi: Pointer to VSI structure
> --
> 2.51.1
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH iwl-net v2 0/1] ice: Fix persistent failure in ice_get_rxfh
2025-12-13 0:22 ` Cody Haas
2025-12-15 8:51 ` [Intel-wired-lan] " Loktionov, Aleksandr
@ 2025-12-15 13:18 ` Przemek Kitszel
2025-12-15 17:59 ` Cody Haas
2026-01-15 16:26 ` [Intel-wired-lan] " Rinitha, SX
2 siblings, 1 reply; 6+ messages in thread
From: Przemek Kitszel @ 2025-12-15 13:18 UTC (permalink / raw)
To: Cody Haas
Cc: anthony.l.nguyen, andrew+netdev, davem, kuba, pabeni, netdev,
intel-wired-lan
On 12/13/25 01:22, Cody Haas wrote:
> Several ioctl functions have the ability to call ice_get_rxfh, however
> all of these ioctl functions do not provide all of the expected
> information in ethtool_rxfh_param. For example, ethtool_get_rxfh_indir does
> not provide an rss_key. This previously caused ethtool_get_rxfh_indir to
> always fail with -EINVAL.
>
> This change draws inspiration from i40e_get_rss to handle this
> situation, by only calling the appropriate rss helpers when the
> necessary information has been provided via ethtool_rxfh_param.
>
> Fixes: b66a972abb6b ("ice: Refactor ice_set/get_rss into LUT and key specific functions")
> Signed-off-by: Cody Haas <chaas@riotgames.com>
> Closes: https://lore.kernel.org/intel-wired-lan/CAH7f-UKkJV8MLY7zCdgCrGE55whRhbGAXvgkDnwgiZ9gUZT7_w@mail.gmail.com/
thank you for the fix,
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
next time please do link to the previous revision and add a changelog
(no need to respin just for that!)
> ---
> drivers/net/ethernet/intel/ice/ice.h | 1 +
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 6 +----
> drivers/net/ethernet/intel/ice/ice_main.c | 28 ++++++++++++++++++++
> 3 files changed, 30 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h
> index c9104b13e1d2..87f4098324ed 100644
> --- a/drivers/net/ethernet/intel/ice/ice.h
> +++ b/drivers/net/ethernet/intel/ice/ice.h
> @@ -953,6 +953,7 @@ void ice_map_xdp_rings(struct ice_vsi *vsi);
> int
> ice_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
> u32 flags);
> +int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size);
> int ice_set_rss_lut(struct ice_vsi *vsi, u8 *lut, u16 lut_size);
> int ice_get_rss_lut(struct ice_vsi *vsi, u8 *lut, u16 lut_size);
> int ice_set_rss_key(struct ice_vsi *vsi, u8 *seed);
> diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> index b0805704834d..a5c139cc536d 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c
> @@ -3649,11 +3649,7 @@ ice_get_rxfh(struct net_device *netdev, struct ethtool_rxfh_param *rxfh)
> if (!lut)
> return -ENOMEM;
>
> - err = ice_get_rss_key(vsi, rxfh->key);
> - if (err)
> - goto out;
> -
> - err = ice_get_rss_lut(vsi, lut, vsi->rss_table_size);
> + err = ice_get_rss(vsi, rxfh->key, lut, vsi->rss_table_size);
> if (err)
> goto out;
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
> index b084839eb811..c653029f07c1 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -8072,6 +8072,34 @@ int ice_get_rss_key(struct ice_vsi *vsi, u8 *seed)
> return status;
> }
>
> +/**
> + * ice_get_rss - Get RSS LUT and/or key
> + * @vsi: Pointer to VSI structure
> + * @seed: Buffer to store the key in
> + * @lut: Buffer to store the lookup table entries
> + * @lut_size: Size of buffer to store the lookup table entries
> + *
> + * Returns 0 on success, negative on failure
> + */
> +int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size)
> +{
> + int err;
> +
> + if (seed) {
> + err = ice_get_rss_key(vsi, seed);
> + if (err)
> + return err;
> + }
> +
> + if (lut) {
> + err = ice_get_rss_lut(vsi, lut, lut_size);
> + if (err)
> + return err;
> + }
> +
> + return 0;
> +}
> +
> /**
> * ice_set_rss_hfunc - Set RSS HASH function
> * @vsi: Pointer to VSI structure
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH iwl-net v2 0/1] ice: Fix persistent failure in ice_get_rxfh
2025-12-15 13:18 ` Przemek Kitszel
@ 2025-12-15 17:59 ` Cody Haas
0 siblings, 0 replies; 6+ messages in thread
From: Cody Haas @ 2025-12-15 17:59 UTC (permalink / raw)
To: Przemek Kitszel
Cc: anthony.l.nguyen, andrew+netdev, davem, kuba, pabeni, netdev,
intel-wired-lan
On Mon, Dec 15, 2025 at 5:18 AM Przemek Kitszel
<przemyslaw.kitszel@intel.com> wrote:
> thank you for the fix,
> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Thank you for the review!
> next time please do link to the previous revision and add a changelog
I'll take note and make sure to add it next time! Thank you for the feedback
Cody
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-net v2 0/1] ice: Fix persistent failure in ice_get_rxfh
2025-12-13 0:22 ` Cody Haas
2025-12-15 8:51 ` [Intel-wired-lan] " Loktionov, Aleksandr
2025-12-15 13:18 ` Przemek Kitszel
@ 2026-01-15 16:26 ` Rinitha, SX
2 siblings, 0 replies; 6+ messages in thread
From: Rinitha, SX @ 2026-01-15 16:26 UTC (permalink / raw)
To: Haas, Cody, intel-wired-lan@lists.osuosl.org
Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, andrew+netdev@lunn.ch,
davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com,
netdev@vger.kernel.org, Haas, Cody
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Cody Haas
> Sent: 13 December 2025 05:52
> To: intel-wired-lan@lists.osuosl.org
> Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>; andrew+netdev@lunn.ch; davem@davemloft.net; kuba@kernel.org; pabeni@redhat.com; netdev@vger.kernel.org; Haas, Cody <chaas@riotgames.com>
> Subject: [Intel-wired-lan] [PATCH iwl-net v2 0/1] ice: Fix persistent failure in ice_get_rxfh
>
> Several ioctl functions have the ability to call ice_get_rxfh, however all of these ioctl functions do not provide all of the expected information in ethtool_rxfh_param. For example, ethtool_get_rxfh_indir does not provide an rss_key. This previously caused ethtool_get_rxfh_indir to always fail with -EINVAL.
>
> This change draws inspiration from i40e_get_rss to handle this situation, by only calling the appropriate rss helpers when the necessary information has been provided via ethtool_rxfh_param.
>
> Fixes: b66a972abb6b ("ice: Refactor ice_set/get_rss into LUT and key specific functions")
> Signed-off-by: Cody Haas <chaas@riotgames.com>
> Closes: https://lore.kernel.org/intel-wired-lan/CAH7f-UKkJV8MLY7zCdgCrGE55whRhbGAXvgkDnwgiZ9gUZT7_w@mail.gmail.com/
> ---
> drivers/net/ethernet/intel/ice/ice.h | 1 +
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 6 +----
> drivers/net/ethernet/intel/ice/ice_main.c | 28 ++++++++++++++++++++
> 3 files changed, 30 insertions(+), 5 deletions(-)
>
Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
^ permalink raw reply [flat|nested] 6+ messages in thread