* [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* 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: [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: [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
* [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 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 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