* [PATCH iwl-next v4 0/3] igb: add RSS key get/set support
@ 2026-01-20 9:34 Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Takashi Kozu @ 2026-01-20 9:34 UTC (permalink / raw)
To: anthony.l.nguyen
Cc: przemyslaw.kitszel, andrew+netdev, davem, edumazet, kuba, pabeni,
intel-wired-lan, netdev, aleksandr.loktionov, pmenzel,
piotr.kwapulinski, enjuk, Takashi Kozu
This series adds ethtool get/set support for the RSS hash key in the igb
driver.
- `ethtool -x <dev>` to display the RSS key
- `ethtool -X <dev> hkey <key>` to configure the RSS key
Without patch:
# ethtool -x $DEV | grep key -A1
RSS hash key:
Operation not supported
# ethtool -X $DEV hkey 00:00:00:00:00:00:00:00:00:00:00:00:000
Cannot set RX flow hash configuration:
Hash key setting not supported
With patch:
# ethtool -x $DEV | grep key -A1
RSS hash key:
86:5d:11:56:bd:6f:20:38:3b:f8:bb:df:00:3a:b0:24:95:9f:f9:f4:25:a3:01:3e:4a:15:d6:7c:4d:af:39:7e:4a:95:f2:fd:f6:b6:26:f7
# ethtool -X $DEV hkey 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
# ethtool -x $DEV | grep key -A1
RSS hash key:
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
<Changelog>
v4:
- modify the position of the declaration in the igb_write_rss_key() so that it is at the start of the block.
v3:
- add ASSERT_RTNL() to explicitly show that an rtnl lock is being used
- Move netdev_rss_key_fill() function from igb_setup_mrqc() to igb_sw_init()
- Add kernel-doc header to igb_write_rss_key()
<Test>
- tools/testing/selftests/drivers/net/hw/rss_api.py is successful
Run the following command
# NETIF=enp0s3 python tools/testing/selftests/drivers/net/hw/rss_api.py | grep -v "# Exception"
Then, I checked the diffs before and after applying the patch
$ diff beforePatch.txt afterPatch.txt
9c9
< not ok 6 rss_api.test_rxfh_nl_set_key
---
> ok 6 rss_api.test_rxfh_nl_set_key
16c16
< # Totals: pass:4 fail:8 xfail:0 xpass:0 skip:0 error:0
---
> # Totals: pass:5 fail:7 xfail:0 xpass:0 skip:0 error:0
The failing tests originally fails due to hardware.
- tools/testing/selftests/drivers/net/hw/toeplitz.py is untested since there is no actual hardware, but since the logic around wr32() is preserved as it is, key writing to the device remain the same.
v2: Fix typos (igc_* → igb_*)
https://lore.kernel.org/intel-wired-lan/20260108052020.84218-5-takkozu@amazon.com/T/
v1: https://lore.kernel.org/all/20251205082106.4028-5-takkozu@amazon.com/
Takashi Kozu (3):
igb: prepare for RSS key get/set support
igb: expose RSS key via ethtool get_rxfh
igb: allow configuring RSS key via ethtool set_rxfh
drivers/net/ethernet/intel/igb/igb.h | 4 +
drivers/net/ethernet/intel/igb/igb_ethtool.c | 86 ++++++++++++++------
drivers/net/ethernet/intel/igb/igb_main.c | 9 +-
3 files changed, 69 insertions(+), 30 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH iwl-next v4 1/3] igb: prepare for RSS key get/set support
2026-01-20 9:34 [PATCH iwl-next v4 0/3] igb: add RSS key get/set support Takashi Kozu
@ 2026-01-20 9:34 ` Takashi Kozu
2026-01-20 9:36 ` Loktionov, Aleksandr
2026-01-20 15:26 ` Kwapulinski, Piotr
2026-01-20 9:34 ` [PATCH iwl-next v4 2/3] igb: expose RSS key via ethtool get_rxfh Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh Takashi Kozu
2 siblings, 2 replies; 10+ messages in thread
From: Takashi Kozu @ 2026-01-20 9:34 UTC (permalink / raw)
To: anthony.l.nguyen
Cc: przemyslaw.kitszel, andrew+netdev, davem, edumazet, kuba, pabeni,
intel-wired-lan, netdev, aleksandr.loktionov, pmenzel,
piotr.kwapulinski, enjuk, Takashi Kozu
Store the RSS key inside struct igb_adapter and introduce the
igb_write_rss_key() helper function. This allows the driver to program
the E1000 registers using a persistent RSS key, instead of using a
stack-local buffer in igb_setup_mrqc().
Signed-off-by: Takashi Kozu <takkozu@amazon.com>
---
drivers/net/ethernet/intel/igb/igb.h | 3 +++
drivers/net/ethernet/intel/igb/igb_ethtool.c | 21 ++++++++++++++++++++
drivers/net/ethernet/intel/igb/igb_main.c | 8 ++++----
3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 0fff1df81b7b..8c9b02058cec 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -495,6 +495,7 @@ struct hwmon_buff {
#define IGB_N_PEROUT 2
#define IGB_N_SDP 4
#define IGB_RETA_SIZE 128
+#define IGB_RSS_KEY_SIZE 40
enum igb_filter_match_flags {
IGB_FILTER_FLAG_ETHER_TYPE = 0x1,
@@ -655,6 +656,7 @@ struct igb_adapter {
struct i2c_client *i2c_client;
u32 rss_indir_tbl_init;
u8 rss_indir_tbl[IGB_RETA_SIZE];
+ u8 rss_key[IGB_RSS_KEY_SIZE];
unsigned long link_check_timeout;
int copper_tries;
@@ -735,6 +737,7 @@ void igb_down(struct igb_adapter *);
void igb_reinit_locked(struct igb_adapter *);
void igb_reset(struct igb_adapter *);
int igb_reinit_queues(struct igb_adapter *);
+void igb_write_rss_key(struct igb_adapter *adapter);
void igb_write_rss_indir_tbl(struct igb_adapter *);
int igb_set_spd_dplx(struct igb_adapter *, u32, u8);
int igb_setup_tx_resources(struct igb_ring *);
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index b507576b28b2..a93069b761a6 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -3019,6 +3019,27 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
return ret;
}
+/**
+ * igb_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 E1000 hardware registers.
+ * Each 32-bit chunk of the key is read using get_unaligned_le32() and written
+ * to the appropriate register.
+ */
+void igb_write_rss_key(struct igb_adapter *adapter)
+{
+ struct e1000_hw *hw = &adapter->hw;
+
+ ASSERT_RTNL();
+
+ for (int i = 0; i < IGB_RSS_KEY_SIZE / 4; i++) {
+ u32 val = get_unaligned_le32(&adapter->rss_key[i * 4]);
+
+ wr32(E1000_RSSRK(i), val);
+ }
+}
+
static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata)
{
struct igb_adapter *adapter = netdev_priv(netdev);
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index dbea37269d2c..c703011b19ec 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -4050,6 +4050,9 @@ static int igb_sw_init(struct igb_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 = IGB_DEFAULT_TXD;
adapter->rx_ring_count = IGB_DEFAULT_RXD;
@@ -4525,11 +4528,8 @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
struct e1000_hw *hw = &adapter->hw;
u32 mrqc, rxcsum;
u32 j, num_rx_queues;
- u32 rss_key[10];
- netdev_rss_key_fill(rss_key, sizeof(rss_key));
- for (j = 0; j < 10; j++)
- wr32(E1000_RSSRK(j), rss_key[j]);
+ igb_write_rss_key(adapter);
num_rx_queues = adapter->rss_queues;
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH iwl-next v4 2/3] igb: expose RSS key via ethtool get_rxfh
2026-01-20 9:34 [PATCH iwl-next v4 0/3] igb: add RSS key get/set support Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
@ 2026-01-20 9:34 ` Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh Takashi Kozu
2 siblings, 0 replies; 10+ messages in thread
From: Takashi Kozu @ 2026-01-20 9:34 UTC (permalink / raw)
To: anthony.l.nguyen
Cc: przemyslaw.kitszel, andrew+netdev, davem, edumazet, kuba, pabeni,
intel-wired-lan, netdev, aleksandr.loktionov, pmenzel,
piotr.kwapulinski, enjuk, Takashi Kozu
Implement igb_get_rxfh_key_size() and extend
igb_get_rxfh() to return the RSS key to userspace.
This can be tested using `ethtool -x <dev>`.
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Signed-off-by: Takashi Kozu <takkozu@amazon.com>
---
drivers/net/ethernet/intel/igb/igb_ethtool.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index a93069b761a6..b387121f0ea7 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -3297,10 +3297,12 @@ static int igb_get_rxfh(struct net_device *netdev,
int i;
rxfh->hfunc = ETH_RSS_HASH_TOP;
- if (!rxfh->indir)
- return 0;
- for (i = 0; i < IGB_RETA_SIZE; i++)
- rxfh->indir[i] = adapter->rss_indir_tbl[i];
+ if (rxfh->indir)
+ for (i = 0; i < IGB_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;
}
@@ -3340,6 +3342,11 @@ void igb_write_rss_indir_tbl(struct igb_adapter *adapter)
}
}
+static u32 igb_get_rxfh_key_size(struct net_device *netdev)
+{
+ return IGB_RSS_KEY_SIZE;
+}
+
static int igb_set_rxfh(struct net_device *netdev,
struct ethtool_rxfh_param *rxfh,
struct netlink_ext_ack *extack)
@@ -3504,6 +3511,7 @@ static const struct ethtool_ops igb_ethtool_ops = {
.get_module_eeprom = igb_get_module_eeprom,
.get_rxfh_indir_size = igb_get_rxfh_indir_size,
.get_rxfh = igb_get_rxfh,
+ .get_rxfh_key_size = igb_get_rxfh_key_size,
.set_rxfh = igb_set_rxfh,
.get_rxfh_fields = igb_get_rxfh_fields,
.set_rxfh_fields = igb_set_rxfh_fields,
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh
2026-01-20 9:34 [PATCH iwl-next v4 0/3] igb: add RSS key get/set support Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 2/3] igb: expose RSS key via ethtool get_rxfh Takashi Kozu
@ 2026-01-20 9:34 ` Takashi Kozu
2026-01-25 13:12 ` Kohei Enju
2 siblings, 1 reply; 10+ messages in thread
From: Takashi Kozu @ 2026-01-20 9:34 UTC (permalink / raw)
To: anthony.l.nguyen
Cc: przemyslaw.kitszel, andrew+netdev, davem, edumazet, kuba, pabeni,
intel-wired-lan, netdev, aleksandr.loktionov, pmenzel,
piotr.kwapulinski, enjuk, Takashi Kozu
Change igc_set_rxfh() to accept and save a userspace-provided
RSS key. When a key is provided, store it in the adapter and write the
E1000 registers accordingly.
This can be tested using `ethtool -X <dev> hkey <key>`.
Signed-off-by: Takashi Kozu <takkozu@amazon.com>
---
drivers/net/ethernet/intel/igb/igb.h | 1 +
drivers/net/ethernet/intel/igb/igb_ethtool.c | 49 +++++++++++---------
drivers/net/ethernet/intel/igb/igb_main.c | 3 +-
3 files changed, 30 insertions(+), 23 deletions(-)
diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
index 8c9b02058cec..2509ec30acf3 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -657,6 +657,7 @@ struct igb_adapter {
u32 rss_indir_tbl_init;
u8 rss_indir_tbl[IGB_RETA_SIZE];
u8 rss_key[IGB_RSS_KEY_SIZE];
+ bool has_user_rss_key;
unsigned long link_check_timeout;
int copper_tries;
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index b387121f0ea7..1db9c2447c91 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -3357,35 +3357,40 @@ static int igb_set_rxfh(struct net_device *netdev,
u32 num_queues;
/* 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;
- switch (hw->mac.type) {
- case e1000_82576:
- /* 82576 supports 2 RSS queues for SR-IOV */
- if (adapter->vfs_allocated_count)
- num_queues = 2;
- break;
- default:
- break;
- }
+ switch (hw->mac.type) {
+ case e1000_82576:
+ /* 82576 supports 2 RSS queues for SR-IOV */
+ if (adapter->vfs_allocated_count)
+ num_queues = 2;
+ break;
+ default:
+ break;
+ }
- /* Verify user input. */
- for (i = 0; i < IGB_RETA_SIZE; i++)
- if (rxfh->indir[i] >= num_queues)
- return -EINVAL;
+ /* Verify user input. */
+ for (i = 0; i < IGB_RETA_SIZE; i++)
+ if (rxfh->indir[i] >= num_queues)
+ return -EINVAL;
- for (i = 0; i < IGB_RETA_SIZE; i++)
- adapter->rss_indir_tbl[i] = rxfh->indir[i];
+ for (i = 0; i < IGB_RETA_SIZE; i++)
+ adapter->rss_indir_tbl[i] = rxfh->indir[i];
+
+ igb_write_rss_indir_tbl(adapter);
+ }
- igb_write_rss_indir_tbl(adapter);
+ if (rxfh->key) {
+ adapter->has_user_rss_key = true;
+ memcpy(adapter->rss_key, rxfh->key, sizeof(adapter->rss_key));
+ igb_write_rss_key(adapter);
+ }
return 0;
}
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index c703011b19ec..8dab133296ca 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -4051,7 +4051,8 @@ static int igb_sw_init(struct igb_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));
+ if (!adapter->has_user_rss_key)
+ netdev_rss_key_fill(adapter->rss_key, sizeof(adapter->rss_key));
/* set default ring sizes */
adapter->tx_ring_count = IGB_DEFAULT_TXD;
--
2.52.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* RE: [PATCH iwl-next v4 1/3] igb: prepare for RSS key get/set support
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
@ 2026-01-20 9:36 ` Loktionov, Aleksandr
2026-01-20 15:26 ` Kwapulinski, Piotr
1 sibling, 0 replies; 10+ messages in thread
From: Loktionov, Aleksandr @ 2026-01-20 9:36 UTC (permalink / raw)
To: Takashi Kozu, Nguyen, Anthony L
Cc: Kitszel, Przemyslaw, andrew+netdev@lunn.ch, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
pmenzel@molgen.mpg.de, Kwapulinski, Piotr, enjuk@amazon.com
> -----Original Message-----
> From: Takashi Kozu <takkozu@amazon.com>
> Sent: Tuesday, January 20, 2026 10:35 AM
> To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>
> Cc: Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>;
> andrew+netdev@lunn.ch; davem@davemloft.net; edumazet@google.com;
> kuba@kernel.org; pabeni@redhat.com; intel-wired-lan@lists.osuosl.org;
> netdev@vger.kernel.org; Loktionov, Aleksandr
> <aleksandr.loktionov@intel.com>; pmenzel@molgen.mpg.de; Kwapulinski,
> Piotr <piotr.kwapulinski@intel.com>; enjuk@amazon.com; Takashi Kozu
> <takkozu@amazon.com>
> Subject: [PATCH iwl-next v4 1/3] igb: prepare for RSS key get/set
> support
>
> Store the RSS key inside struct igb_adapter and introduce the
> igb_write_rss_key() helper function. This allows the driver to program
> the E1000 registers using a persistent RSS key, instead of using a
> stack-local buffer in igb_setup_mrqc().
>
> Signed-off-by: Takashi Kozu <takkozu@amazon.com>
> ---
> drivers/net/ethernet/intel/igb/igb.h | 3 +++
> drivers/net/ethernet/intel/igb/igb_ethtool.c | 21
> ++++++++++++++++++++
> drivers/net/ethernet/intel/igb/igb_main.c | 8 ++++----
> 3 files changed, 28 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/igb.h
> b/drivers/net/ethernet/intel/igb/igb.h
> index 0fff1df81b7b..8c9b02058cec 100644
> --- a/drivers/net/ethernet/intel/igb/igb.h
> +++ b/drivers/net/ethernet/intel/igb/igb.h
> @@ -495,6 +495,7 @@ struct hwmon_buff {
> #define IGB_N_PEROUT 2
> #define IGB_N_SDP 4
> #define IGB_RETA_SIZE 128
> +#define IGB_RSS_KEY_SIZE 40
>
> enum igb_filter_match_flags {
> IGB_FILTER_FLAG_ETHER_TYPE = 0x1,
> @@ -655,6 +656,7 @@ struct igb_adapter {
> struct i2c_client *i2c_client;
> u32 rss_indir_tbl_init;
> u8 rss_indir_tbl[IGB_RETA_SIZE];
> + u8 rss_key[IGB_RSS_KEY_SIZE];
>
> unsigned long link_check_timeout;
> int copper_tries;
> @@ -735,6 +737,7 @@ void igb_down(struct igb_adapter *); void
> igb_reinit_locked(struct igb_adapter *); void igb_reset(struct
> igb_adapter *); int igb_reinit_queues(struct igb_adapter *);
> +void igb_write_rss_key(struct igb_adapter *adapter);
> void igb_write_rss_indir_tbl(struct igb_adapter *); int
> igb_set_spd_dplx(struct igb_adapter *, u32, u8); int
> igb_setup_tx_resources(struct igb_ring *); diff --git
> a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> index b507576b28b2..a93069b761a6 100644
> --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> @@ -3019,6 +3019,27 @@ static int igb_set_rxnfc(struct net_device
> *dev, struct ethtool_rxnfc *cmd)
> return ret;
> }
>
> +/**
> + * igb_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 E1000 hardware
> registers.
> + * Each 32-bit chunk of the key is read using get_unaligned_le32()
> and
> +written
> + * to the appropriate register.
> + */
> +void igb_write_rss_key(struct igb_adapter *adapter) {
> + struct e1000_hw *hw = &adapter->hw;
> +
> + ASSERT_RTNL();
> +
> + for (int i = 0; i < IGB_RSS_KEY_SIZE / 4; i++) {
> + u32 val = get_unaligned_le32(&adapter->rss_key[i * 4]);
> +
> + wr32(E1000_RSSRK(i), val);
> + }
> +}
> +
> static int igb_get_eee(struct net_device *netdev, struct ethtool_keee
> *edata) {
> struct igb_adapter *adapter = netdev_priv(netdev); diff --git
> a/drivers/net/ethernet/intel/igb/igb_main.c
> b/drivers/net/ethernet/intel/igb/igb_main.c
> index dbea37269d2c..c703011b19ec 100644
> --- a/drivers/net/ethernet/intel/igb/igb_main.c
> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> @@ -4050,6 +4050,9 @@ static int igb_sw_init(struct igb_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 = IGB_DEFAULT_TXD;
> adapter->rx_ring_count = IGB_DEFAULT_RXD; @@ -4525,11 +4528,8
> @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
> struct e1000_hw *hw = &adapter->hw;
> u32 mrqc, rxcsum;
> u32 j, num_rx_queues;
> - u32 rss_key[10];
>
> - netdev_rss_key_fill(rss_key, sizeof(rss_key));
> - for (j = 0; j < 10; j++)
> - wr32(E1000_RSSRK(j), rss_key[j]);
> + igb_write_rss_key(adapter);
>
> num_rx_queues = adapter->rss_queues;
>
> --
> 2.52.0
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* RE: [PATCH iwl-next v4 1/3] igb: prepare for RSS key get/set support
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
2026-01-20 9:36 ` Loktionov, Aleksandr
@ 2026-01-20 15:26 ` Kwapulinski, Piotr
1 sibling, 0 replies; 10+ messages in thread
From: Kwapulinski, Piotr @ 2026-01-20 15:26 UTC (permalink / raw)
To: Takashi Kozu, Nguyen, Anthony L
Cc: Kitszel, Przemyslaw, andrew+netdev@lunn.ch, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
Loktionov, Aleksandr, pmenzel@molgen.mpg.de, enjuk@amazon.com
>-----Original Message-----
>From: Takashi Kozu <takkozu@amazon.com>
>Sent: Tuesday, January 20, 2026 10:35 AM
>To: Nguyen, Anthony L <anthony.l.nguyen@intel.com>
>Cc: Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>; andrew+netdev@lunn.ch; davem@davemloft.net; edumazet@google.com; kuba@kernel.org; pabeni@redhat.com; intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org; Loktionov, Aleksandr <aleksandr.loktionov@intel.com>; pmenzel@molgen.mpg.de; Kwapulinski, Piotr <piotr.kwapulinski@intel.com>; enjuk@amazon.com; Takashi Kozu <takkozu@amazon.com>
>Subject: [PATCH iwl-next v4 1/3] igb: prepare for RSS key get/set support
>
>Store the RSS key inside struct igb_adapter and introduce the
>igb_write_rss_key() helper function. This allows the driver to program the E1000 registers using a persistent RSS key, instead of using a stack-local buffer in igb_setup_mrqc().
>
>Signed-off-by: Takashi Kozu <takkozu@amazon.com>
>---
> drivers/net/ethernet/intel/igb/igb.h | 3 +++
> drivers/net/ethernet/intel/igb/igb_ethtool.c | 21 ++++++++++++++++++++
> drivers/net/ethernet/intel/igb/igb_main.c | 8 ++++----
> 3 files changed, 28 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
>index 0fff1df81b7b..8c9b02058cec 100644
>--- a/drivers/net/ethernet/intel/igb/igb.h
>+++ b/drivers/net/ethernet/intel/igb/igb.h
>@@ -495,6 +495,7 @@ struct hwmon_buff {
> #define IGB_N_PEROUT 2
> #define IGB_N_SDP 4
> #define IGB_RETA_SIZE 128
>+#define IGB_RSS_KEY_SIZE 40
>
> enum igb_filter_match_flags {
> IGB_FILTER_FLAG_ETHER_TYPE = 0x1,
>@@ -655,6 +656,7 @@ struct igb_adapter {
> struct i2c_client *i2c_client;
> u32 rss_indir_tbl_init;
> u8 rss_indir_tbl[IGB_RETA_SIZE];
>+ u8 rss_key[IGB_RSS_KEY_SIZE];
>
> unsigned long link_check_timeout;
> int copper_tries;
>@@ -735,6 +737,7 @@ void igb_down(struct igb_adapter *); void igb_reinit_locked(struct igb_adapter *); void igb_reset(struct igb_adapter *); int igb_reinit_queues(struct igb_adapter *);
>+void igb_write_rss_key(struct igb_adapter *adapter);
> void igb_write_rss_indir_tbl(struct igb_adapter *); int igb_set_spd_dplx(struct igb_adapter *, u32, u8); int igb_setup_tx_resources(struct igb_ring *); diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
>index b507576b28b2..a93069b761a6 100644
>--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
>+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
>@@ -3019,6 +3019,27 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
> return ret;
> }
>
>+/**
>+ * igb_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 E1000 hardware registers.
>+ * Each 32-bit chunk of the key is read using get_unaligned_le32() and
>+written
>+ * to the appropriate register.
>+ */
>+void igb_write_rss_key(struct igb_adapter *adapter) {
>+ struct e1000_hw *hw = &adapter->hw;
>+
>+ ASSERT_RTNL();
>+
>+ for (int i = 0; i < IGB_RSS_KEY_SIZE / 4; i++) {
>+ u32 val = get_unaligned_le32(&adapter->rss_key[i * 4]);
>+
>+ wr32(E1000_RSSRK(i), val);
>+ }
>+}
>+
> static int igb_get_eee(struct net_device *netdev, struct ethtool_keee *edata) {
> struct igb_adapter *adapter = netdev_priv(netdev); diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
>index dbea37269d2c..c703011b19ec 100644
>--- a/drivers/net/ethernet/intel/igb/igb_main.c
>+++ b/drivers/net/ethernet/intel/igb/igb_main.c
>@@ -4050,6 +4050,9 @@ static int igb_sw_init(struct igb_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 = IGB_DEFAULT_TXD;
> adapter->rx_ring_count = IGB_DEFAULT_RXD; @@ -4525,11 +4528,8 @@ static void igb_setup_mrqc(struct igb_adapter *adapter)
> struct e1000_hw *hw = &adapter->hw;
> u32 mrqc, rxcsum;
> u32 j, num_rx_queues;
>- u32 rss_key[10];
>
>- netdev_rss_key_fill(rss_key, sizeof(rss_key));
>- for (j = 0; j < 10; j++)
>- wr32(E1000_RSSRK(j), rss_key[j]);
>+ igb_write_rss_key(adapter);
>
> num_rx_queues = adapter->rss_queues;
>
>--
>2.52.0
Reviewed-by: Piotr Kwapulinski <piotr.kwapulinski@intel.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh
2026-01-20 9:34 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh Takashi Kozu
@ 2026-01-25 13:12 ` Kohei Enju
2026-01-27 22:33 ` Tony Nguyen
0 siblings, 1 reply; 10+ messages in thread
From: Kohei Enju @ 2026-01-25 13:12 UTC (permalink / raw)
To: takkozu
Cc: aleksandr.loktionov, andrew+netdev, anthony.l.nguyen, davem,
edumazet, enjuk, intel-wired-lan, kuba, netdev, pabeni,
piotr.kwapulinski, pmenzel, przemyslaw.kitszel
On Tue, 20 Jan 2026 18:34:40 +0900, Takashi Kozu wrote:
> Change igc_set_rxfh() to accept and save a userspace-provided
> RSS key. When a key is provided, store it in the adapter and write the
> E1000 registers accordingly.
>
> This can be tested using `ethtool -X <dev> hkey <key>`.
>
> Signed-off-by: Takashi Kozu <takkozu@amazon.com>
> ---
> drivers/net/ethernet/intel/igb/igb.h | 1 +
> drivers/net/ethernet/intel/igb/igb_ethtool.c | 49 +++++++++++---------
> drivers/net/ethernet/intel/igb/igb_main.c | 3 +-
> 3 files changed, 30 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
> index 8c9b02058cec..2509ec30acf3 100644
> --- a/drivers/net/ethernet/intel/igb/igb.h
> +++ b/drivers/net/ethernet/intel/igb/igb.h
> @@ -657,6 +657,7 @@ struct igb_adapter {
> u32 rss_indir_tbl_init;
> u8 rss_indir_tbl[IGB_RETA_SIZE];
> u8 rss_key[IGB_RSS_KEY_SIZE];
> + bool has_user_rss_key;
Hi Kozu-san.
While preparing for testing, I noticed that now 'has_user_rss_key' is
not necessary.
Since netdev_rss_key_fill() is called in igb_sw_init() and igb_sw_init()
is called only once for the adapter's lifetime, adapter->rss_key
wouldn't be changed except for user-intended change.
I'd drop that flag and related code (see below)
>
> unsigned long link_check_timeout;
> int copper_tries;
> diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> index b387121f0ea7..1db9c2447c91 100644
> --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> @@ -3357,35 +3357,40 @@ static int igb_set_rxfh(struct net_device *netdev,
> u32 num_queues;
>
> /* 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;
>
> - switch (hw->mac.type) {
> - case e1000_82576:
> - /* 82576 supports 2 RSS queues for SR-IOV */
> - if (adapter->vfs_allocated_count)
> - num_queues = 2;
> - break;
> - default:
> - break;
> - }
> + switch (hw->mac.type) {
> + case e1000_82576:
> + /* 82576 supports 2 RSS queues for SR-IOV */
> + if (adapter->vfs_allocated_count)
> + num_queues = 2;
> + break;
> + default:
> + break;
> + }
>
> - /* Verify user input. */
> - for (i = 0; i < IGB_RETA_SIZE; i++)
> - if (rxfh->indir[i] >= num_queues)
> - return -EINVAL;
> + /* Verify user input. */
> + for (i = 0; i < IGB_RETA_SIZE; i++)
> + if (rxfh->indir[i] >= num_queues)
> + return -EINVAL;
>
>
> - for (i = 0; i < IGB_RETA_SIZE; i++)
> - adapter->rss_indir_tbl[i] = rxfh->indir[i];
> + for (i = 0; i < IGB_RETA_SIZE; i++)
> + adapter->rss_indir_tbl[i] = rxfh->indir[i];
> +
> + igb_write_rss_indir_tbl(adapter);
> + }
>
> - igb_write_rss_indir_tbl(adapter);
> + if (rxfh->key) {
> + adapter->has_user_rss_key = true;
here
> + memcpy(adapter->rss_key, rxfh->key, sizeof(adapter->rss_key));
> + igb_write_rss_key(adapter);
> + }
>
> return 0;
> }
> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> index c703011b19ec..8dab133296ca 100644
> --- a/drivers/net/ethernet/intel/igb/igb_main.c
> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
> @@ -4051,7 +4051,8 @@ static int igb_sw_init(struct igb_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));
> + if (!adapter->has_user_rss_key)
> + netdev_rss_key_fill(adapter->rss_key, sizeof(adapter->rss_key));
and this diff.
>
> /* set default ring sizes */
> adapter->tx_ring_count = IGB_DEFAULT_TXD;
> --
> 2.52.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh
2026-01-25 13:12 ` Kohei Enju
@ 2026-01-27 22:33 ` Tony Nguyen
2026-01-28 6:09 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via Kohei Enju
0 siblings, 1 reply; 10+ messages in thread
From: Tony Nguyen @ 2026-01-27 22:33 UTC (permalink / raw)
To: Kohei Enju, takkozu
Cc: aleksandr.loktionov, andrew+netdev, davem, edumazet, enjuk,
intel-wired-lan, kuba, netdev, pabeni, piotr.kwapulinski, pmenzel,
przemyslaw.kitszel
On 1/25/2026 5:12 AM, Kohei Enju wrote:
> On Tue, 20 Jan 2026 18:34:40 +0900, Takashi Kozu wrote:
>
>> Change igc_set_rxfh() to accept and save a userspace-provided
>> RSS key. When a key is provided, store it in the adapter and write the
>> E1000 registers accordingly.
>>
>> This can be tested using `ethtool -X <dev> hkey <key>`.
>>
>> Signed-off-by: Takashi Kozu <takkozu@amazon.com>
>> ---
>> drivers/net/ethernet/intel/igb/igb.h | 1 +
>> drivers/net/ethernet/intel/igb/igb_ethtool.c | 49 +++++++++++---------
>> drivers/net/ethernet/intel/igb/igb_main.c | 3 +-
>> 3 files changed, 30 insertions(+), 23 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
>> index 8c9b02058cec..2509ec30acf3 100644
>> --- a/drivers/net/ethernet/intel/igb/igb.h
>> +++ b/drivers/net/ethernet/intel/igb/igb.h
>> @@ -657,6 +657,7 @@ struct igb_adapter {
>> u32 rss_indir_tbl_init;
>> u8 rss_indir_tbl[IGB_RETA_SIZE];
>> u8 rss_key[IGB_RSS_KEY_SIZE];
>> + bool has_user_rss_key;
>
> Hi Kozu-san.
>
> While preparing for testing, I noticed that now 'has_user_rss_key' is
> not necessary.
>
> Since netdev_rss_key_fill() is called in igb_sw_init() and igb_sw_init()
> is called only once for the adapter's lifetime, adapter->rss_key
> wouldn't be changed except for user-intended change.
>
> I'd drop that flag and related code (see below)
Hi Kohei,
I believe this igb implementation was based on your igc implementation
which also has the same. Would it be possible for you to update the igc
to do this as well?
Thanks,
Tony
>>
>> unsigned long link_check_timeout;
>> int copper_tries;
>> diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
>> index b387121f0ea7..1db9c2447c91 100644
>> --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
>> +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
>> @@ -3357,35 +3357,40 @@ static int igb_set_rxfh(struct net_device *netdev,
>> u32 num_queues;
>>
>> /* 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;
>>
>> - switch (hw->mac.type) {
>> - case e1000_82576:
>> - /* 82576 supports 2 RSS queues for SR-IOV */
>> - if (adapter->vfs_allocated_count)
>> - num_queues = 2;
>> - break;
>> - default:
>> - break;
>> - }
>> + switch (hw->mac.type) {
>> + case e1000_82576:
>> + /* 82576 supports 2 RSS queues for SR-IOV */
>> + if (adapter->vfs_allocated_count)
>> + num_queues = 2;
>> + break;
>> + default:
>> + break;
>> + }
>>
>> - /* Verify user input. */
>> - for (i = 0; i < IGB_RETA_SIZE; i++)
>> - if (rxfh->indir[i] >= num_queues)
>> - return -EINVAL;
>> + /* Verify user input. */
>> + for (i = 0; i < IGB_RETA_SIZE; i++)
>> + if (rxfh->indir[i] >= num_queues)
>> + return -EINVAL;
>>
>>
>> - for (i = 0; i < IGB_RETA_SIZE; i++)
>> - adapter->rss_indir_tbl[i] = rxfh->indir[i];
>> + for (i = 0; i < IGB_RETA_SIZE; i++)
>> + adapter->rss_indir_tbl[i] = rxfh->indir[i];
>> +
>> + igb_write_rss_indir_tbl(adapter);
>> + }
>>
>> - igb_write_rss_indir_tbl(adapter);
>> + if (rxfh->key) {
>> + adapter->has_user_rss_key = true;
>
> here
>
>> + memcpy(adapter->rss_key, rxfh->key, sizeof(adapter->rss_key));
>> + igb_write_rss_key(adapter);
>> + }
>>
>> return 0;
>> }
>> diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
>> index c703011b19ec..8dab133296ca 100644
>> --- a/drivers/net/ethernet/intel/igb/igb_main.c
>> +++ b/drivers/net/ethernet/intel/igb/igb_main.c
>> @@ -4051,7 +4051,8 @@ static int igb_sw_init(struct igb_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));
>> + if (!adapter->has_user_rss_key)
>> + netdev_rss_key_fill(adapter->rss_key, sizeof(adapter->rss_key));
>
> and this diff.
>
>>
>> /* set default ring sizes */
>> adapter->tx_ring_count = IGB_DEFAULT_TXD;
>> --
>> 2.52.0
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via
2026-01-27 22:33 ` Tony Nguyen
@ 2026-01-28 6:09 ` Kohei Enju
2026-01-28 17:33 ` Tony Nguyen
0 siblings, 1 reply; 10+ messages in thread
From: Kohei Enju @ 2026-01-28 6:09 UTC (permalink / raw)
To: anthony.l.nguyen
Cc: aleksandr.loktionov, andrew+netdev, davem, edumazet, enjuk,
intel-wired-lan, kohei, kuba, netdev, pabeni, piotr.kwapulinski,
pmenzel, przemyslaw.kitszel, takkozu
On Tue, 27 Jan 2026 14:33:24 -0800, Tony Nguyen wrote:
> On 1/25/2026 5:12 AM, Kohei Enju wrote:
> > On Tue, 20 Jan 2026 18:34:40 +0900, Takashi Kozu wrote:
> >
> >> Change igc_set_rxfh() to accept and save a userspace-provided
> >> RSS key. When a key is provided, store it in the adapter and write the
> >> E1000 registers accordingly.
> >>
> >> This can be tested using `ethtool -X <dev> hkey <key>`.
> >>
> >> Signed-off-by: Takashi Kozu <takkozu@amazon.com>
> >> ---
> >> drivers/net/ethernet/intel/igb/igb.h | 1 +
> >> drivers/net/ethernet/intel/igb/igb_ethtool.c | 49 +++++++++++---------
> >> drivers/net/ethernet/intel/igb/igb_main.c | 3 +-
> >> 3 files changed, 30 insertions(+), 23 deletions(-)
> >>
> >> diff --git a/drivers/net/ethernet/intel/igb/igb.h b/drivers/net/ethernet/intel/igb/igb.h
> >> index 8c9b02058cec..2509ec30acf3 100644
> >> --- a/drivers/net/ethernet/intel/igb/igb.h
> >> +++ b/drivers/net/ethernet/intel/igb/igb.h
> >> @@ -657,6 +657,7 @@ struct igb_adapter {
> >> u32 rss_indir_tbl_init;
> >> u8 rss_indir_tbl[IGB_RETA_SIZE];
> >> u8 rss_key[IGB_RSS_KEY_SIZE];
> >> + bool has_user_rss_key;
> >
> > Hi Kozu-san.
> >
> > While preparing for testing, I noticed that now 'has_user_rss_key' is
> > not necessary.
> >
> > Since netdev_rss_key_fill() is called in igb_sw_init() and igb_sw_init()
> > is called only once for the adapter's lifetime, adapter->rss_key
> > wouldn't be changed except for user-intended change.
> >
> > I'd drop that flag and related code (see below)
>
> Hi Kohei,
>
> I believe this igb implementation was based on your igc implementation
> which also has the same. Would it be possible for you to update the igc
> to do this as well?
Yes, you're right. I'd love to do that and post as new version,
so could you drop the series[1] from tnguy/next-queue.git?
[1] https://lore.kernel.org/intel-wired-lan/20251025150136.47618-1-enjuk@amazon.com/
>
> Thanks,
> Tony
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via
2026-01-28 6:09 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via Kohei Enju
@ 2026-01-28 17:33 ` Tony Nguyen
0 siblings, 0 replies; 10+ messages in thread
From: Tony Nguyen @ 2026-01-28 17:33 UTC (permalink / raw)
To: Kohei Enju
Cc: aleksandr.loktionov, andrew+netdev, davem, edumazet, enjuk,
intel-wired-lan, kuba, netdev, pabeni, piotr.kwapulinski, pmenzel,
przemyslaw.kitszel, takkozu
On 1/27/2026 10:09 PM, Kohei Enju wrote:
>
> Yes, you're right. I'd love to do that and post as new version,
> so could you drop the series[1] from tnguy/next-queue.git?
Done.
Thanks,
Tony
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-01-28 17:33 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-20 9:34 [PATCH iwl-next v4 0/3] igb: add RSS key get/set support Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 1/3] igb: prepare for " Takashi Kozu
2026-01-20 9:36 ` Loktionov, Aleksandr
2026-01-20 15:26 ` Kwapulinski, Piotr
2026-01-20 9:34 ` [PATCH iwl-next v4 2/3] igb: expose RSS key via ethtool get_rxfh Takashi Kozu
2026-01-20 9:34 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via ethtool set_rxfh Takashi Kozu
2026-01-25 13:12 ` Kohei Enju
2026-01-27 22:33 ` Tony Nguyen
2026-01-28 6:09 ` [PATCH iwl-next v4 3/3] igb: allow configuring RSS key via Kohei Enju
2026-01-28 17:33 ` Tony Nguyen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox