public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 iwl-next 0/3] igc: add RSS key get/set support
@ 2026-01-31 16:29 Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Kohei Enju @ 2026-01-31 16:29 UTC (permalink / raw)
  To: intel-wired-lan, netdev
  Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vitaly Lifshits,
	Simon Horman, Aleksandr Loktionov, kohei.enju, Kohei Enju

This series adds ethtool get/set support for the RSS hash key.

Without patch:
 # ethtool -x $DEV | grep key -A1
 RSS hash key:
 Operation not supported
 # ethtool -X $DEV hkey be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef
 Cannot set RX flow hash configuration:
  Hash key setting not supported

With patch:
 # ethtool -x $DEV | grep key -A1
 RSS hash key:
 dd:7c:1f:06:1a:42:dc:e5:7e:90:2c:48:aa:3f:5d:5a:d7:da:ec:44:3e:3f:df:78:89:1e:3c:68:2e:59:da:a0:23:5a:32:5c:cf:5e:7e:7b
 # ethtool -X $DEV hkey be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef
 # ethtool -x $DEV | grep key -A1
 RSS hash key:
 be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef:be:ef

Also tested with rss_api.py and toeplitz.py.
 # ./tools/testing/selftests/drivers/net/hw/rss_api.py | grep rss_api.test_rxfh_nl_set_key
 ok 6 rss_api.test_rxfh_nl_set_key
 # tools/testing/selftests/drivers/net/hw/toeplitz.py | grep "# Totals"
 # Totals: pass:12 fail:0 xfail:0 xpass:0 skip:0 error:0

Notes:
Since the 2/3 patch is unchanged, I preserved Tested-by and Reviewed-by
tags for the patch.

Changes:
  v2:
    - call netdev_rss_key_fill() in igc_sw_init(), not in
      igc_setup_mrqc()
    - add documentation for igc_write_rss_key()
    - drop has_user_rss_key flag, since rss_key is never cleared except
      for user operations
    - change email address from @amazon.com to @enjuk.jp
  v1: https://lore.kernel.org/intel-wired-lan/20251025150136.47618-1-enjuk@amazon.com/

Kohei Enju (3):
  igc: prepare for RSS key get/set support
  igc: expose RSS key via ethtool get_rxfh
  igc: allow configuring RSS key via ethtool set_rxfh

 drivers/net/ethernet/intel/igc/igc.h         |  3 +
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 67 +++++++++++++++-----
 drivers/net/ethernet/intel/igc/igc_main.c    |  8 +--
 3 files changed, 57 insertions(+), 21 deletions(-)

-- 
2.51.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-01-31 16:29 [PATCH v2 iwl-next 0/3] igc: add RSS key get/set support Kohei Enju
@ 2026-01-31 16:29 ` Kohei Enju
  2026-02-02  7:59   ` Loktionov, Aleksandr
  2026-02-04 10:29   ` Simon Horman
  2026-01-31 16:29 ` [PATCH v2 iwl-next 2/3] igc: expose RSS key via ethtool get_rxfh Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh Kohei Enju
  2 siblings, 2 replies; 11+ messages in thread
From: Kohei Enju @ 2026-01-31 16:29 UTC (permalink / raw)
  To: intel-wired-lan, netdev
  Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vitaly Lifshits,
	Simon Horman, Aleksandr Loktionov, kohei.enju, Kohei Enju

Store the RSS key inside struct igc_adapter and introduce the
igc_write_rss_key() helper function. This allows the driver to program
the RSSRK registers using a persistent RSS key, instead of using a
stack-local buffer in igc_setup_mrqc().

This is a preparation patch for adding RSS key get/set support in
subsequent changes, and no functional change is intended in this patch.

Signed-off-by: Kohei Enju <kohei@enjuk.jp>
---
 drivers/net/ethernet/intel/igc/igc.h         |  3 +++
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 20 ++++++++++++++++++++
 drivers/net/ethernet/intel/igc/igc_main.c    |  8 ++++----
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h
index a427f05814c1..dd159397d191 100644
--- a/drivers/net/ethernet/intel/igc/igc.h
+++ b/drivers/net/ethernet/intel/igc/igc.h
@@ -30,6 +30,7 @@ void igc_ethtool_set_ops(struct net_device *);
 
 #define MAX_ETYPE_FILTER		8
 #define IGC_RETA_SIZE			128
+#define IGC_RSS_KEY_SIZE		40
 
 /* SDP support */
 #define IGC_N_EXTTS	2
@@ -302,6 +303,7 @@ struct igc_adapter {
 	unsigned int nfc_rule_count;
 
 	u8 rss_indir_tbl[IGC_RETA_SIZE];
+	u8 rss_key[IGC_RSS_KEY_SIZE];
 
 	unsigned long link_check_timeout;
 	struct igc_info ei;
@@ -360,6 +362,7 @@ unsigned int igc_get_max_rss_queues(struct igc_adapter *adapter);
 void igc_set_flag_queue_pairs(struct igc_adapter *adapter,
 			      const u32 max_rss_queues);
 int igc_reinit_queues(struct igc_adapter *adapter);
+void igc_write_rss_key(struct igc_adapter *adapter);
 void igc_write_rss_indir_tbl(struct igc_adapter *adapter);
 bool igc_has_link(struct igc_adapter *adapter);
 void igc_reset(struct igc_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 3172cdbca9cc..1b4075e7e8e6 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1460,6 +1460,26 @@ static int igc_ethtool_set_rxnfc(struct net_device *dev,
 	}
 }
 
+/**
+ * igc_write_rss_key - Program the RSS key into device registers
+ * @adapter: board private structure
+ *
+ * Write the RSS key stored in adapter->rss_key to the IGC_RSSRK registers.
+ * Each 32-bit chunk of the key is read using get_unaligned_le32() and written
+ * to the appropriate register.
+ */
+void igc_write_rss_key(struct igc_adapter *adapter)
+{
+	struct igc_hw *hw = &adapter->hw;
+	u32 val;
+	int i;
+
+	for (i = 0; i < IGC_RSS_KEY_SIZE / 4; i++) {
+		val = get_unaligned_le32(&adapter->rss_key[i * 4]);
+		wr32(IGC_RSSRK(i), val);
+	}
+}
+
 void igc_write_rss_indir_tbl(struct igc_adapter *adapter)
 {
 	struct igc_hw *hw = &adapter->hw;
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 89a321a344d2..98410f9d7828 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -778,11 +778,8 @@ static void igc_setup_mrqc(struct igc_adapter *adapter)
 	struct igc_hw *hw = &adapter->hw;
 	u32 j, num_rx_queues;
 	u32 mrqc, rxcsum;
-	u32 rss_key[10];
 
-	netdev_rss_key_fill(rss_key, sizeof(rss_key));
-	for (j = 0; j < 10; j++)
-		wr32(IGC_RSSRK(j), rss_key[j]);
+	igc_write_rss_key(adapter);
 
 	num_rx_queues = adapter->rss_queues;
 
@@ -5046,6 +5043,9 @@ static int igc_sw_init(struct igc_adapter *adapter)
 
 	pci_read_config_word(pdev, PCI_COMMAND, &hw->bus.pci_cmd_word);
 
+	/* init RSS key */
+	netdev_rss_key_fill(adapter->rss_key, sizeof(adapter->rss_key));
+
 	/* set default ring sizes */
 	adapter->tx_ring_count = IGC_DEFAULT_TXD;
 	adapter->rx_ring_count = IGC_DEFAULT_RXD;
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 iwl-next 2/3] igc: expose RSS key via ethtool get_rxfh
  2026-01-31 16:29 [PATCH v2 iwl-next 0/3] igc: add RSS key get/set support Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
@ 2026-01-31 16:29 ` Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh Kohei Enju
  2 siblings, 0 replies; 11+ messages in thread
From: Kohei Enju @ 2026-01-31 16:29 UTC (permalink / raw)
  To: intel-wired-lan, netdev
  Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vitaly Lifshits,
	Simon Horman, Aleksandr Loktionov, kohei.enju, Kohei Enju,
	Avigail Dahan

Implement igc_ethtool_get_rxfh_key_size() and extend
igc_ethtool_get_rxfh() to return the RSS key to userspace.

This can be tested using `ethtool -x <dev>`.

Signed-off-by: Kohei Enju <kohei@enjuk.jp>
Tested-by: Avigail Dahan <avigailx.dahan@intel.com>
Reviewed-by: Vitaly Lifshits <vitaly.lifshits@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 1b4075e7e8e6..661b044073ca 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1502,6 +1502,11 @@ void igc_write_rss_indir_tbl(struct igc_adapter *adapter)
 	}
 }
 
+static u32 igc_ethtool_get_rxfh_key_size(struct net_device *netdev)
+{
+	return IGC_RSS_KEY_SIZE;
+}
+
 static u32 igc_ethtool_get_rxfh_indir_size(struct net_device *netdev)
 {
 	return IGC_RETA_SIZE;
@@ -1514,10 +1519,13 @@ static int igc_ethtool_get_rxfh(struct net_device *netdev,
 	int i;
 
 	rxfh->hfunc = ETH_RSS_HASH_TOP;
-	if (!rxfh->indir)
-		return 0;
-	for (i = 0; i < IGC_RETA_SIZE; i++)
-		rxfh->indir[i] = adapter->rss_indir_tbl[i];
+
+	if (rxfh->indir)
+		for (i = 0; i < IGC_RETA_SIZE; i++)
+			rxfh->indir[i] = adapter->rss_indir_tbl[i];
+
+	if (rxfh->key)
+		memcpy(rxfh->key, adapter->rss_key, sizeof(adapter->rss_key));
 
 	return 0;
 }
@@ -2195,6 +2203,7 @@ static const struct ethtool_ops igc_ethtool_ops = {
 	.get_rxnfc		= igc_ethtool_get_rxnfc,
 	.set_rxnfc		= igc_ethtool_set_rxnfc,
 	.get_rx_ring_count	= igc_ethtool_get_rx_ring_count,
+	.get_rxfh_key_size	= igc_ethtool_get_rxfh_key_size,
 	.get_rxfh_indir_size	= igc_ethtool_get_rxfh_indir_size,
 	.get_rxfh		= igc_ethtool_get_rxfh,
 	.set_rxfh		= igc_ethtool_set_rxfh,
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh
  2026-01-31 16:29 [PATCH v2 iwl-next 0/3] igc: add RSS key get/set support Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
  2026-01-31 16:29 ` [PATCH v2 iwl-next 2/3] igc: expose RSS key via ethtool get_rxfh Kohei Enju
@ 2026-01-31 16:29 ` Kohei Enju
  2026-02-04 10:29   ` Simon Horman
  2026-02-24 13:39   ` [Intel-wired-lan] " Dahan, AvigailX
  2 siblings, 2 replies; 11+ messages in thread
From: Kohei Enju @ 2026-01-31 16:29 UTC (permalink / raw)
  To: intel-wired-lan, netdev
  Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vitaly Lifshits,
	Simon Horman, Aleksandr Loktionov, kohei.enju, Kohei Enju

Change igc_ethtool_set_rxfh() to accept and save a userspace-provided
RSS key. When a key is provided, store it in the adapter and write the
RSSRK registers accordingly.

This can be tested using `ethtool -X <dev> hkey <key>`.

Signed-off-by: Kohei Enju <kohei@enjuk.jp>
---
 drivers/net/ethernet/intel/igc/igc_ethtool.c | 30 +++++++++++---------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c
index 661b044073ca..eb5b146f6f10 100644
--- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
+++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
@@ -1539,24 +1539,28 @@ static int igc_ethtool_set_rxfh(struct net_device *netdev,
 	int i;
 
 	/* We do not allow change in unsupported parameters */
-	if (rxfh->key ||
-	    (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE &&
-	     rxfh->hfunc != ETH_RSS_HASH_TOP))
+	if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE &&
+	    rxfh->hfunc != ETH_RSS_HASH_TOP)
 		return -EOPNOTSUPP;
-	if (!rxfh->indir)
-		return 0;
 
-	num_queues = adapter->rss_queues;
+	if (rxfh->indir) {
+		num_queues = adapter->rss_queues;
 
-	/* Verify user input. */
-	for (i = 0; i < IGC_RETA_SIZE; i++)
-		if (rxfh->indir[i] >= num_queues)
-			return -EINVAL;
+		/* Verify user input. */
+		for (i = 0; i < IGC_RETA_SIZE; i++)
+			if (rxfh->indir[i] >= num_queues)
+				return -EINVAL;
 
-	for (i = 0; i < IGC_RETA_SIZE; i++)
-		adapter->rss_indir_tbl[i] = rxfh->indir[i];
+		for (i = 0; i < IGC_RETA_SIZE; i++)
+			adapter->rss_indir_tbl[i] = rxfh->indir[i];
 
-	igc_write_rss_indir_tbl(adapter);
+		igc_write_rss_indir_tbl(adapter);
+	}
+
+	if (rxfh->key) {
+		memcpy(adapter->rss_key, rxfh->key, sizeof(adapter->rss_key));
+		igc_write_rss_key(adapter);
+	}
 
 	return 0;
 }
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* RE: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
@ 2026-02-02  7:59   ` Loktionov, Aleksandr
  2026-02-02  9:06     ` Kohei Enju
  2026-02-24 13:34     ` [Intel-wired-lan] " Dahan, AvigailX
  2026-02-04 10:29   ` Simon Horman
  1 sibling, 2 replies; 11+ messages in thread
From: Loktionov, Aleksandr @ 2026-02-02  7:59 UTC (permalink / raw)
  To: Kohei Enju, intel-wired-lan@lists.osuosl.org,
	netdev@vger.kernel.org
  Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Lifshits, Vitaly, Simon Horman, kohei.enju@gmail.com



> -----Original Message-----
> From: Kohei Enju <kohei@enjuk.jp>
> Sent: Saturday, January 31, 2026 5:30 PM
> To: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org
> Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>; Andrew Lunn
> <andrew+netdev@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric
> Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo
> Abeni <pabeni@redhat.com>; Lifshits, Vitaly
> <vitaly.lifshits@intel.com>; Simon Horman <horms@kernel.org>;
> Loktionov, Aleksandr <aleksandr.loktionov@intel.com>;
> kohei.enju@gmail.com; Kohei Enju <kohei@enjuk.jp>
> Subject: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set
> support
> 
> Store the RSS key inside struct igc_adapter and introduce the
> igc_write_rss_key() helper function. This allows the driver to program
> the RSSRK registers using a persistent RSS key, instead of using a
> stack-local buffer in igc_setup_mrqc().
> 
> This is a preparation patch for adding RSS key get/set support in
> subsequent changes, and no functional change is intended in this
> patch.
> 
> Signed-off-by: Kohei Enju <kohei@enjuk.jp>
> ---
>  drivers/net/ethernet/intel/igc/igc.h         |  3 +++
>  drivers/net/ethernet/intel/igc/igc_ethtool.c | 20
> ++++++++++++++++++++
>  drivers/net/ethernet/intel/igc/igc_main.c    |  8 ++++----
>  3 files changed, 27 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc.h
> b/drivers/net/ethernet/intel/igc/igc.h
> index a427f05814c1..dd159397d191 100644
> --- a/drivers/net/ethernet/intel/igc/igc.h
> +++ b/drivers/net/ethernet/intel/igc/igc.h
> @@ -30,6 +30,7 @@ void igc_ethtool_set_ops(struct net_device *);
> 
>  #define MAX_ETYPE_FILTER		8
>  #define IGC_RETA_SIZE			128
> +#define IGC_RSS_KEY_SIZE		40
> 
>  /* SDP support */
>  #define IGC_N_EXTTS	2
> @@ -302,6 +303,7 @@ struct igc_adapter {
>  	unsigned int nfc_rule_count;
> 
>  	u8 rss_indir_tbl[IGC_RETA_SIZE];
> +	u8 rss_key[IGC_RSS_KEY_SIZE];
> 
>  	unsigned long link_check_timeout;
>  	struct igc_info ei;
> @@ -360,6 +362,7 @@ unsigned int igc_get_max_rss_queues(struct
> igc_adapter *adapter);  void igc_set_flag_queue_pairs(struct
> igc_adapter *adapter,
>  			      const u32 max_rss_queues);
>  int igc_reinit_queues(struct igc_adapter *adapter);
> +void igc_write_rss_key(struct igc_adapter *adapter);
>  void igc_write_rss_indir_tbl(struct igc_adapter *adapter);  bool
> igc_has_link(struct igc_adapter *adapter);  void igc_reset(struct
> igc_adapter *adapter); diff --git
> a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> index 3172cdbca9cc..1b4075e7e8e6 100644
> --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
I think here should be added include?

#include <linux/unaligned.h> /* for get_unaligned_le32() */

Isn't it?

> @@ -1460,6 +1460,26 @@ static int igc_ethtool_set_rxnfc(struct
> net_device *dev,
>  	}
>  }
> 
> +/**
> + * igc_write_rss_key - Program the RSS key into device registers
> + * @adapter: board private structure
> + *
> + * Write the RSS key stored in adapter->rss_key to the IGC_RSSRK
> registers.
> + * Each 32-bit chunk of the key is read using get_unaligned_le32()
> and
> +written
> + * to the appropriate register.
> + */
> +void igc_write_rss_key(struct igc_adapter *adapter) {
> +	struct igc_hw *hw = &adapter->hw;
> +	u32 val;
> +	int i;
> +
> +	for (i = 0; i < IGC_RSS_KEY_SIZE / 4; i++) {
> +		val = get_unaligned_le32(&adapter->rss_key[i * 4]);
> +		wr32(IGC_RSSRK(i), val);
> +	}
> +}
> +

...

> --
> 2.51.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-02-02  7:59   ` Loktionov, Aleksandr
@ 2026-02-02  9:06     ` Kohei Enju
  2026-02-02  9:08       ` Loktionov, Aleksandr
  2026-02-24 13:34     ` [Intel-wired-lan] " Dahan, AvigailX
  1 sibling, 1 reply; 11+ messages in thread
From: Kohei Enju @ 2026-02-02  9:06 UTC (permalink / raw)
  To: aleksandr.loktionov
  Cc: andrew+netdev, anthony.l.nguyen, davem, edumazet, horms,
	intel-wired-lan, kohei.enju, kohei, kuba, netdev, pabeni,
	przemyslaw.kitszel, vitaly.lifshits

On Mon, 2 Feb 2026 07:59:55 +0000, "Loktionov, Aleksandr" wrote:

> > @@ -360,6 +362,7 @@ unsigned int igc_get_max_rss_queues(struct
> > igc_adapter *adapter);  void igc_set_flag_queue_pairs(struct
> > igc_adapter *adapter,
> >  			      const u32 max_rss_queues);
> >  int igc_reinit_queues(struct igc_adapter *adapter);
> > +void igc_write_rss_key(struct igc_adapter *adapter);
> >  void igc_write_rss_indir_tbl(struct igc_adapter *adapter);  bool
> > igc_has_link(struct igc_adapter *adapter);  void igc_reset(struct
> > igc_adapter *adapter); diff --git
> > a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > index 3172cdbca9cc..1b4075e7e8e6 100644
> > --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> I think here should be added include?
> 
> #include <linux/unaligned.h> /* for get_unaligned_le32() */
> 
> Isn't it?

Hi Alex, thank you for reviewing.

Compilation succeeds as is, and the header file is included indirectly
in the following path.

igc_ethtool.c
  -> linux/if_vlan.h
    -> linux/etherdevice.h
      -> linux/unaligned.h

> 
> > @@ -1460,6 +1460,26 @@ static int igc_ethtool_set_rxnfc(struct
> > net_device *dev,
> >  	}
> >  }
> >=20
> > +/**
> > + * igc_write_rss_key - Program the RSS key into device registers
> > + * @adapter: board private structure
> > + *
> > + * Write the RSS key stored in adapter->rss_key to the IGC_RSSRK
> > registers.
> > + * Each 32-bit chunk of the key is read using get_unaligned_le32()
> > and
> > +written
> > + * to the appropriate register.
> > + */
> > +void igc_write_rss_key(struct igc_adapter *adapter) {
> > +	struct igc_hw *hw =3D &adapter->hw;
> > +	u32 val;
> > +	int i;
> > +
> > +	for (i =3D 0; i < IGC_RSS_KEY_SIZE / 4; i++) {
> > +		val =3D get_unaligned_le32(&adapter->rss_key[i * 4]);
> > +		wr32(IGC_RSSRK(i), val);
> > +	}
> > +}
> > +
> 
> ...
> 
> > --
> > 2.51.0

^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-02-02  9:06     ` Kohei Enju
@ 2026-02-02  9:08       ` Loktionov, Aleksandr
  0 siblings, 0 replies; 11+ messages in thread
From: Loktionov, Aleksandr @ 2026-02-02  9:08 UTC (permalink / raw)
  To: Kohei Enju
  Cc: andrew+netdev@lunn.ch, Nguyen, Anthony L, davem@davemloft.net,
	edumazet@google.com, horms@kernel.org,
	intel-wired-lan@lists.osuosl.org, kohei.enju@gmail.com,
	kuba@kernel.org, netdev@vger.kernel.org, pabeni@redhat.com,
	Kitszel, Przemyslaw, Lifshits, Vitaly



> -----Original Message-----
> From: Kohei Enju <kohei@enjuk.jp>
> Sent: Monday, February 2, 2026 10:06 AM
> To: Loktionov, Aleksandr <aleksandr.loktionov@intel.com>
> Cc: andrew+netdev@lunn.ch; Nguyen, Anthony L
> <anthony.l.nguyen@intel.com>; davem@davemloft.net;
> edumazet@google.com; horms@kernel.org; intel-wired-
> lan@lists.osuosl.org; kohei.enju@gmail.com; kohei@enjuk.jp;
> kuba@kernel.org; netdev@vger.kernel.org; pabeni@redhat.com; Kitszel,
> Przemyslaw <przemyslaw.kitszel@intel.com>; Lifshits, Vitaly
> <vitaly.lifshits@intel.com>
> Subject: Re: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set
> support
> 
> On Mon, 2 Feb 2026 07:59:55 +0000, "Loktionov, Aleksandr" wrote:
> 
> > > @@ -360,6 +362,7 @@ unsigned int igc_get_max_rss_queues(struct
> > > igc_adapter *adapter);  void igc_set_flag_queue_pairs(struct
> > > igc_adapter *adapter,
> > >  			      const u32 max_rss_queues);  int
> igc_reinit_queues(struct
> > > igc_adapter *adapter);
> > > +void igc_write_rss_key(struct igc_adapter *adapter);
> > >  void igc_write_rss_indir_tbl(struct igc_adapter *adapter);  bool
> > > igc_has_link(struct igc_adapter *adapter);  void igc_reset(struct
> > > igc_adapter *adapter); diff --git
> > > a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > > b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > > index 3172cdbca9cc..1b4075e7e8e6 100644
> > > --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > > +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c
> > I think here should be added include?
> >
> > #include <linux/unaligned.h> /* for get_unaligned_le32() */
> >
> > Isn't it?
> 
> Hi Alex, thank you for reviewing.
> 
> Compilation succeeds as is, and the header file is included indirectly
> in the following path.
> 
> igc_ethtool.c
>   -> linux/if_vlan.h
>     -> linux/etherdevice.h
>       -> linux/unaligned.h
> 
> >
> > > @@ -1460,6 +1460,26 @@ static int igc_ethtool_set_rxnfc(struct
> > >net_device *dev,
> > >  	}
> > >  }
> > >=20
> > > +/**
> > > + * igc_write_rss_key - Program the RSS key into device registers
> > > + * @adapter: board private structure
> > > + *
> > > + * Write the RSS key stored in adapter->rss_key to the IGC_RSSRK
> > > registers.
> > > + * Each 32-bit chunk of the key is read using
> get_unaligned_le32()
> > > and
> > > +written
> > > + * to the appropriate register.
> > > + */
> > > +void igc_write_rss_key(struct igc_adapter *adapter) {
> > > +	struct igc_hw *hw =3D &adapter->hw;
> > > +	u32 val;
> > > +	int i;
> > > +
> > > +	for (i =3D 0; i < IGC_RSS_KEY_SIZE / 4; i++) {
> > > +		val =3D get_unaligned_le32(&adapter->rss_key[i * 4]);
> > > +		wr32(IGC_RSSRK(i), val);
> > > +	}
> > > +}
> > > +
> >
> > ...
> >
> > > --
> > > 2.51.0

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
  2026-02-02  7:59   ` Loktionov, Aleksandr
@ 2026-02-04 10:29   ` Simon Horman
  1 sibling, 0 replies; 11+ messages in thread
From: Simon Horman @ 2026-02-04 10:29 UTC (permalink / raw)
  To: Kohei Enju
  Cc: intel-wired-lan, netdev, Tony Nguyen, Przemek Kitszel,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vitaly Lifshits, Aleksandr Loktionov, kohei.enju

On Sat, Jan 31, 2026 at 04:29:36PM +0000, Kohei Enju wrote:
> Store the RSS key inside struct igc_adapter and introduce the
> igc_write_rss_key() helper function. This allows the driver to program
> the RSSRK registers using a persistent RSS key, instead of using a
> stack-local buffer in igc_setup_mrqc().
> 
> This is a preparation patch for adding RSS key get/set support in
> subsequent changes, and no functional change is intended in this patch.
> 
> Signed-off-by: Kohei Enju <kohei@enjuk.jp>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh
  2026-01-31 16:29 ` [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh Kohei Enju
@ 2026-02-04 10:29   ` Simon Horman
  2026-02-24 13:39   ` [Intel-wired-lan] " Dahan, AvigailX
  1 sibling, 0 replies; 11+ messages in thread
From: Simon Horman @ 2026-02-04 10:29 UTC (permalink / raw)
  To: Kohei Enju
  Cc: intel-wired-lan, netdev, Tony Nguyen, Przemek Kitszel,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Vitaly Lifshits, Aleksandr Loktionov, kohei.enju

On Sat, Jan 31, 2026 at 04:29:38PM +0000, Kohei Enju wrote:
> Change igc_ethtool_set_rxfh() to accept and save a userspace-provided
> RSS key. When a key is provided, store it in the adapter and write the
> RSSRK registers accordingly.
> 
> This can be tested using `ethtool -X <dev> hkey <key>`.
> 
> Signed-off-by: Kohei Enju <kohei@enjuk.jp>

Reviewed-by: Simon Horman <horms@kernel.org>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Intel-wired-lan] [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set support
  2026-02-02  7:59   ` Loktionov, Aleksandr
  2026-02-02  9:06     ` Kohei Enju
@ 2026-02-24 13:34     ` Dahan, AvigailX
  1 sibling, 0 replies; 11+ messages in thread
From: Dahan, AvigailX @ 2026-02-24 13:34 UTC (permalink / raw)
  To: Loktionov, Aleksandr, Kohei Enju,
	intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org
  Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Lifshits, Vitaly, Simon Horman, kohei.enju@gmail.com



On 02/02/2026 9:59, Loktionov, Aleksandr wrote:
> 
> 
>> -----Original Message-----
>> From: Kohei Enju <kohei@enjuk.jp>
>> Sent: Saturday, January 31, 2026 5:30 PM
>> To: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org
>> Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel,
>> Przemyslaw <przemyslaw.kitszel@intel.com>; Andrew Lunn
>> <andrew+netdev@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric
>> Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo
>> Abeni <pabeni@redhat.com>; Lifshits, Vitaly
>> <vitaly.lifshits@intel.com>; Simon Horman <horms@kernel.org>;
>> Loktionov, Aleksandr <aleksandr.loktionov@intel.com>;
>> kohei.enju@gmail.com; Kohei Enju <kohei@enjuk.jp>
>> Subject: [PATCH v2 iwl-next 1/3] igc: prepare for RSS key get/set
>> support
>>
>> Store the RSS key inside struct igc_adapter and introduce the
>> igc_write_rss_key() helper function. This allows the driver to program
>> the RSSRK registers using a persistent RSS key, instead of using a
>> stack-local buffer in igc_setup_mrqc().
>>
>> This is a preparation patch for adding RSS key get/set support in
>> subsequent changes, and no functional change is intended in this
>> patch.
>>
>> Signed-off-by: Kohei Enju <kohei@enjuk.jp>
>> ---
>>   drivers/net/ethernet/intel/igc/igc.h         |  3 +++
>>   drivers/net/ethernet/intel/igc/igc_ethtool.c | 20
>> ++++++++++++++++++++
>>   drivers/net/ethernet/intel/igc/igc_main.c    |  8 ++++----
>>   3 files changed, 27 insertions(+), 4 deletions(-)
>>

Tested-by: Avigail Dahan <avigailx.dahan@intel.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [Intel-wired-lan] [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh
  2026-01-31 16:29 ` [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh Kohei Enju
  2026-02-04 10:29   ` Simon Horman
@ 2026-02-24 13:39   ` Dahan, AvigailX
  1 sibling, 0 replies; 11+ messages in thread
From: Dahan, AvigailX @ 2026-02-24 13:39 UTC (permalink / raw)
  To: Kohei Enju, intel-wired-lan, netdev
  Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Vitaly Lifshits,
	Simon Horman, Aleksandr Loktionov, kohei.enju



On 31/01/2026 18:29, Kohei Enju wrote:
> Change igc_ethtool_set_rxfh() to accept and save a userspace-provided
> RSS key. When a key is provided, store it in the adapter and write the
> RSSRK registers accordingly.
> 
> This can be tested using `ethtool -X <dev> hkey <key>`.
> 
> Signed-off-by: Kohei Enju <kohei@enjuk.jp>
> ---
>   drivers/net/ethernet/intel/igc/igc_ethtool.c | 30 +++++++++++---------
>   1 file changed, 17 insertions(+), 13 deletions(-)
> 

Tested-by: Avigail Dahan <avigailx.dahan@intel.com>

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-02-24 13:39 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-31 16:29 [PATCH v2 iwl-next 0/3] igc: add RSS key get/set support Kohei Enju
2026-01-31 16:29 ` [PATCH v2 iwl-next 1/3] igc: prepare for " Kohei Enju
2026-02-02  7:59   ` Loktionov, Aleksandr
2026-02-02  9:06     ` Kohei Enju
2026-02-02  9:08       ` Loktionov, Aleksandr
2026-02-24 13:34     ` [Intel-wired-lan] " Dahan, AvigailX
2026-02-04 10:29   ` Simon Horman
2026-01-31 16:29 ` [PATCH v2 iwl-next 2/3] igc: expose RSS key via ethtool get_rxfh Kohei Enju
2026-01-31 16:29 ` [PATCH v2 iwl-next 3/3] igc: allow configuring RSS key via ethtool set_rxfh Kohei Enju
2026-02-04 10:29   ` Simon Horman
2026-02-24 13:39   ` [Intel-wired-lan] " Dahan, AvigailX

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox