patch 'net/e1000: fix igc RSS redirection table' has been queued to stable release 24.11.7
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Mon Jul 6 12:20:29 CEST 2026
Hi,
FYI, your patch has been queued to stable release 24.11.7
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/05/26. So please
shout if anyone has objections.
Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.
Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable
This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/f3dcead7d567b9ea87838ee98ce16ed432457b10
Thanks.
Luca Boccassi
---
>From f3dcead7d567b9ea87838ee98ce16ed432457b10 Mon Sep 17 00:00:00 2001
From: Shuzo Ichiyoshi <deadcafe.beef at gmail.com>
Date: Mon, 29 Jun 2026 13:51:13 +0900
Subject: [PATCH] net/e1000: fix igc RSS redirection table
[ upstream commit 7679118b012e455cd9faed4c7f27103483802103 ]
The IGC RETA register stores four 8-bit queue indexes.
igc_rss_configure() and igc_add_rss_filter() used a fresh
uninitialized union for each table entry and wrote the register only
every fourth entry. As a result, three bytes of each RETA register
came from stack garbage.
Build the register a word at a time and initialize all four queue
indexes before writing it.
Fixes: a5aeb2b9e225 ("net/igc: support Rx and Tx")
Fixes: 746664d546fb ("net/igc: support flow API")
Signed-off-by: Shuzo Ichiyoshi <deadcafe.beef at gmail.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
.mailmap | 1 +
drivers/net/igc/igc_txrx.c | 45 ++++++++++++++++++++------------------
2 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/.mailmap b/.mailmap
index ae4aa47cd9..acecb58342 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1472,6 +1472,7 @@ Shun Hao <shunh at nvidia.com>
Shu Shen <shu.shen at radisys.com>
Shujing Dong <shujing.dong at corigine.com>
Shuo Li <lishuo02 at baidu.com>
+Shuzo Ichiyoshi <deadcafe.beef at gmail.com>
Shweta Choudaha <shweta.choudaha at att.com>
Shyam Kumar Shrivastav <shrivastav.shyam at gmail.com>
Shy Shyman <shys at nvidia.com> <shys at mellanox.com>
diff --git a/drivers/net/igc/igc_txrx.c b/drivers/net/igc/igc_txrx.c
index d1c9dd9c3c..44016c3dc6 100644
--- a/drivers/net/igc/igc_txrx.c
+++ b/drivers/net/igc/igc_txrx.c
@@ -824,17 +824,20 @@ igc_rss_configure(struct rte_eth_dev *dev)
uint16_t i;
/* Fill in redirection table. */
- for (i = 0; i < IGC_RSS_RDT_SIZD; i++) {
- union igc_rss_reta_reg reta;
- uint16_t q_idx, reta_idx;
+ for (i = 0; i < IGC_RSS_RDT_SIZD; i += IGC_RSS_RDT_REG_SIZE) {
+ union igc_rss_reta_reg reta = { .dword = 0 };
+ uint16_t reta_idx;
- q_idx = (uint8_t)((dev->data->nb_rx_queues > 1) ?
- i % dev->data->nb_rx_queues : 0);
- reta_idx = i % sizeof(reta);
- reta.bytes[reta_idx] = q_idx;
- if (reta_idx == sizeof(reta) - 1)
- IGC_WRITE_REG_LE_VALUE(hw,
- IGC_RETA(i / sizeof(reta)), reta.dword);
+ RTE_BUILD_BUG_ON(sizeof(reta.bytes) != IGC_RSS_RDT_REG_SIZE);
+ for (reta_idx = 0; reta_idx < IGC_RSS_RDT_REG_SIZE; reta_idx++) {
+ uint16_t q_idx;
+
+ q_idx = (uint8_t)((dev->data->nb_rx_queues > 1) ?
+ (i + reta_idx) % dev->data->nb_rx_queues : 0);
+ reta.bytes[reta_idx] = q_idx;
+ }
+ IGC_WRITE_REG_LE_VALUE(hw,
+ IGC_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
}
/*
@@ -940,18 +943,18 @@ igc_add_rss_filter(struct rte_eth_dev *dev, struct igc_rss_filter *rss)
igc_rss_conf_set(rss_filter, &rss->conf);
/* Fill in redirection table. */
- for (i = 0, j = 0; i < IGC_RSS_RDT_SIZD; i++, j++) {
- union igc_rss_reta_reg reta;
- uint16_t q_idx, reta_idx;
+ for (i = 0, j = 0; i < IGC_RSS_RDT_SIZD; i += IGC_RSS_RDT_REG_SIZE) {
+ union igc_rss_reta_reg reta = { .dword = 0 };
+ uint16_t reta_idx;
- if (j == rss->conf.queue_num)
- j = 0;
- q_idx = rss->conf.queue[j];
- reta_idx = i % sizeof(reta);
- reta.bytes[reta_idx] = q_idx;
- if (reta_idx == sizeof(reta) - 1)
- IGC_WRITE_REG_LE_VALUE(hw,
- IGC_RETA(i / sizeof(reta)), reta.dword);
+ RTE_BUILD_BUG_ON(sizeof(reta.bytes) != IGC_RSS_RDT_REG_SIZE);
+ for (reta_idx = 0; reta_idx < IGC_RSS_RDT_REG_SIZE; reta_idx++, j++) {
+ if (j == rss->conf.queue_num)
+ j = 0;
+ reta.bytes[reta_idx] = rss->conf.queue[j];
+ }
+ IGC_WRITE_REG_LE_VALUE(hw,
+ IGC_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
}
if (rss_conf.rss_key == NULL)
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-07-03 12:55:48.117918105 +0100
+++ 0037-net-e1000-fix-igc-RSS-redirection-table.patch 2026-07-03 12:55:46.670573982 +0100
@@ -1 +1 @@
-From 7679118b012e455cd9faed4c7f27103483802103 Mon Sep 17 00:00:00 2001
+From f3dcead7d567b9ea87838ee98ce16ed432457b10 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 7679118b012e455cd9faed4c7f27103483802103 ]
+
@@ -17 +18,0 @@
-Cc: stable at dpdk.org
@@ -22,2 +23,2 @@
- .mailmap | 1 +
- drivers/net/intel/e1000/igc_txrx.c | 45 ++++++++++++++++--------------
+ .mailmap | 1 +
+ drivers/net/igc/igc_txrx.c | 45 ++++++++++++++++++++------------------
@@ -27 +28 @@
-index d6a1a92a57..4b5eb0c841 100644
+index ae4aa47cd9..acecb58342 100644
@@ -30,3 +31,3 @@
-@@ -1544,6 +1544,7 @@ Shujing Dong <shujing.dong at corigine.com>
- Shuki Katzenelson <shuki at lightbitslabs.com>
- Shun Hao <shunh at nvidia.com>
+@@ -1472,6 +1472,7 @@ Shun Hao <shunh at nvidia.com>
+ Shu Shen <shu.shen at radisys.com>
+ Shujing Dong <shujing.dong at corigine.com>
@@ -36 +36,0 @@
- Shy Shyman <shys at nvidia.com> <shys at mellanox.com>
@@ -38,5 +38,6 @@
-diff --git a/drivers/net/intel/e1000/igc_txrx.c b/drivers/net/intel/e1000/igc_txrx.c
-index c13460f381..1ab8f2079d 100644
---- a/drivers/net/intel/e1000/igc_txrx.c
-+++ b/drivers/net/intel/e1000/igc_txrx.c
-@@ -828,17 +828,20 @@ igc_rss_configure(struct rte_eth_dev *dev)
+ Shy Shyman <shys at nvidia.com> <shys at mellanox.com>
+diff --git a/drivers/net/igc/igc_txrx.c b/drivers/net/igc/igc_txrx.c
+index d1c9dd9c3c..44016c3dc6 100644
+--- a/drivers/net/igc/igc_txrx.c
++++ b/drivers/net/igc/igc_txrx.c
+@@ -824,17 +824,20 @@ igc_rss_configure(struct rte_eth_dev *dev)
@@ -58,2 +59,2 @@
-- E1000_WRITE_REG_LE_VALUE(hw,
-- E1000_RETA(i / sizeof(reta)), reta.dword);
+- IGC_WRITE_REG_LE_VALUE(hw,
+- IGC_RETA(i / sizeof(reta)), reta.dword);
@@ -68,2 +69,2 @@
-+ E1000_WRITE_REG_LE_VALUE(hw,
-+ E1000_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
++ IGC_WRITE_REG_LE_VALUE(hw,
++ IGC_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
@@ -73 +74 @@
-@@ -944,18 +947,18 @@ igc_add_rss_filter(struct rte_eth_dev *dev, struct igc_rss_filter *rss)
+@@ -940,18 +943,18 @@ igc_add_rss_filter(struct rte_eth_dev *dev, struct igc_rss_filter *rss)
@@ -90,2 +91,2 @@
-- E1000_WRITE_REG_LE_VALUE(hw,
-- E1000_RETA(i / sizeof(reta)), reta.dword);
+- IGC_WRITE_REG_LE_VALUE(hw,
+- IGC_RETA(i / sizeof(reta)), reta.dword);
@@ -98,2 +99,2 @@
-+ E1000_WRITE_REG_LE_VALUE(hw,
-+ E1000_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
++ IGC_WRITE_REG_LE_VALUE(hw,
++ IGC_RETA(i / IGC_RSS_RDT_REG_SIZE), reta.dword);
More information about the stable
mailing list