patch 'net/ice: fix Rx queue count reporting after TM commit' has been queued to stable release 24.11.9
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Tue Oct 27 12:49:41 CET 2026
Hi,
FYI, your patch has been queued to stable release 24.11.9
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/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/9f4094a5a54e5be791fce037a417985e40524c54
Thanks.
Luca Boccassi
---
>From 9f4094a5a54e5be791fce037a417985e40524c54 Mon Sep 17 00:00:00 2001
From: Ciara Loftus <ciara.loftus at intel.com>
Date: Mon, 7 Sep 2026 13:07:49 +0000
Subject: [PATCH] net/ice: fix Rx queue count reporting after TM commit
[ upstream commit 719db5f684907f31f3256405f408516ff6344582 ]
Currently, ice_dev_info_get() assigns the value of `vsi->nb_qps` to both
`max_rx_queues` and `max_tx_queues`.
After a Tx scheduler hierarchy is committed, the value of nb_qps may
grow to reflect the VSI's larger Tx scheduler capacity. However the Tx
scheduler hierarchy change has no effect on the VSI's Rx queue
allocation, which stays fixed at its original size for the life of the
port. An application can then request more Rx queues than the VSI's
actual Rx resources support when the inflated nb_qps is assigned to
`max_rx_queues`.
`vsi->nb_qps` also feeds `ice_vsi_disable_queues_intr()`, which clears
both Rx and Tx queue interrupt registers by absolute queue index on
every port stop. Once `nb_qps` grows past the VSI's fixed queue window,
this can clear interrupt registers belonging to a different VSI.
Fix this by introducing `vsi->nb_tm_txqs` to track the Tx scheduler
capacity as it grows, leaving `vsi->nb_qps` as the VSI's fixed queue
allocation for the life of the port. `ice_vsi_disable_queues_intr()` is
switched to `nb_used_qps`, which already tracks the actually configured
queue count.
Fixes: 715d449a965b ("net/ice: enhance Tx scheduler hierarchy support")
Signed-off-by: Ciara Loftus <ciara.loftus at intel.com>
Acked-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/ice/ice_ethdev.c | 5 +++--
drivers/net/ice/ice_ethdev.h | 1 +
drivers/net/ice/ice_tm.c | 8 ++++----
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
index 63127d2c7f1..30803dd9544 100644
--- a/drivers/net/ice/ice_ethdev.c
+++ b/drivers/net/ice/ice_ethdev.c
@@ -1732,6 +1732,7 @@ ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type)
ret);
goto fail_mem;
}
+ vsi->nb_tm_txqs = vsi->nb_qps;
break;
case ICE_VSI_CTRL:
@@ -2758,7 +2759,7 @@ ice_vsi_disable_queues_intr(struct ice_vsi *vsi)
uint16_t msix_intr, i;
/* disable interrupt and also clear all the exist config */
- for (i = 0; i < vsi->nb_qps; i++) {
+ for (i = 0; i < vsi->nb_used_qps; i++) {
ICE_WRITE_REG(hw, QINT_TQCTL(vsi->base_queue + i), 0);
ICE_WRITE_REG(hw, QINT_RQCTL(vsi->base_queue + i), 0);
rte_wmb();
@@ -4098,7 +4099,7 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
dev_info->min_rx_bufsize = ICE_BUF_SIZE_MIN;
dev_info->max_rx_pktlen = ICE_FRAME_SIZE_MAX;
dev_info->max_rx_queues = vsi->nb_qps;
- dev_info->max_tx_queues = vsi->nb_qps;
+ dev_info->max_tx_queues = vsi->nb_tm_txqs;
dev_info->max_mac_addrs = vsi->max_macaddrs;
dev_info->max_vfs = pci_dev->max_vfs;
dev_info->max_mtu = dev_info->max_rx_pktlen - ICE_ETH_OVERHEAD;
diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
index 6fcb3296eda..653e7455265 100644
--- a/drivers/net/ice/ice_ethdev.h
+++ b/drivers/net/ice/ice_ethdev.h
@@ -287,6 +287,7 @@ struct ice_vsi {
struct ice_mac_filter_list mac_list; /* macvlan filter list */
struct ice_vlan_filter_list vlan_list; /* vlan filter list */
uint16_t nb_qps; /* Number of queue pairs VSI can occupy */
+ uint16_t nb_tm_txqs; /* Number of Tx queues usable by the committed TM hierarchy */
uint16_t nb_used_qps; /* Number of queue pairs VSI uses */
uint16_t max_macaddrs; /* Maximum number of MAC addresses */
uint16_t base_queue; /* The first queue index of this VSI */
diff --git a/drivers/net/ice/ice_tm.c b/drivers/net/ice/ice_tm.c
index 149d1630589..c5d8bc04c7d 100644
--- a/drivers/net/ice/ice_tm.c
+++ b/drivers/net/ice/ice_tm.c
@@ -859,9 +859,9 @@ commit_new_hierarchy(struct rte_eth_dev *dev)
}
/* TM hierarchy deleted. Restore default scheduler state. */
reset_hw_node_recursive(hw, hw->vsi_ctx[pf->main_vsi->idx]->sched.vsi_node[0]);
- pf->main_vsi->nb_qps = pf->lan_nb_qps;
+ pf->main_vsi->nb_tm_txqs = pf->lan_nb_qps;
pf->tm_conf.committed = false;
- return ice_alloc_lan_q_ctx(hw, 0, 0, pf->main_vsi->nb_qps);
+ return ice_alloc_lan_q_ctx(hw, 0, 0, pf->main_vsi->nb_tm_txqs);
}
/* handle case where VSI node needs to move DOWN the hierarchy */
@@ -889,13 +889,13 @@ commit_new_hierarchy(struct rte_eth_dev *dev)
nodes_created_per_level[i], i);
hw->vsi_ctx[pf->main_vsi->idx]->sched.vsi_node[0] = new_vsi_root;
- pf->main_vsi->nb_qps =
+ pf->main_vsi->nb_tm_txqs =
RTE_MIN(nodes_created_per_level[qg_lvl] * hw->max_children[qg_lvl],
hw->layer_info[q_lvl].max_device_nodes);
pf->tm_conf.committed = true; /* set flag to be checks on queue start */
- return ice_alloc_lan_q_ctx(hw, 0, 0, pf->main_vsi->nb_qps);
+ return ice_alloc_lan_q_ctx(hw, 0, 0, pf->main_vsi->nb_tm_txqs);
}
static int
--
2.47.3
---
Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- - 2026-10-27 11:43:57.067050948 +0000
+++ 0087-net-ice-fix-Rx-queue-count-reporting-after-TM-commit.patch 2026-10-27 11:43:53.606062296 +0000
@@ -1 +1 @@
-From 719db5f684907f31f3256405f408516ff6344582 Mon Sep 17 00:00:00 2001
+From 9f4094a5a54e5be791fce037a417985e40524c54 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 719db5f684907f31f3256405f408516ff6344582 ]
+
@@ -29 +30,0 @@
-Cc: stable at dpdk.org
@@ -34,3 +35,3 @@
- drivers/net/intel/ice/ice_ethdev.c | 5 +++--
- drivers/net/intel/ice/ice_ethdev.h | 1 +
- drivers/net/intel/ice/ice_tm.c | 8 ++++----
+ drivers/net/ice/ice_ethdev.c | 5 +++--
+ drivers/net/ice/ice_ethdev.h | 1 +
+ drivers/net/ice/ice_tm.c | 8 ++++----
@@ -39,5 +40,5 @@
-diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
-index fd148848d3..b7ccace623 100644
---- a/drivers/net/intel/ice/ice_ethdev.c
-+++ b/drivers/net/intel/ice/ice_ethdev.c
-@@ -1816,6 +1816,7 @@ ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type)
+diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c
+index 63127d2c7f1..30803dd9544 100644
+--- a/drivers/net/ice/ice_ethdev.c
++++ b/drivers/net/ice/ice_ethdev.c
+@@ -1732,6 +1732,7 @@ ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type)
@@ -51 +52 @@
-@@ -2924,7 +2925,7 @@ ice_vsi_disable_queues_intr(struct ice_vsi *vsi)
+@@ -2758,7 +2759,7 @@ ice_vsi_disable_queues_intr(struct ice_vsi *vsi)
@@ -60 +61 @@
-@@ -4628,7 +4629,7 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
+@@ -4098,7 +4099,7 @@ ice_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
@@ -69,5 +70,5 @@
-diff --git a/drivers/net/intel/ice/ice_ethdev.h b/drivers/net/intel/ice/ice_ethdev.h
-index 5914454c7c..f8e18e68f0 100644
---- a/drivers/net/intel/ice/ice_ethdev.h
-+++ b/drivers/net/intel/ice/ice_ethdev.h
-@@ -330,6 +330,7 @@ struct ice_vsi {
+diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h
+index 6fcb3296eda..653e7455265 100644
+--- a/drivers/net/ice/ice_ethdev.h
++++ b/drivers/net/ice/ice_ethdev.h
+@@ -287,6 +287,7 @@ struct ice_vsi {
@@ -81,4 +82,4 @@
-diff --git a/drivers/net/intel/ice/ice_tm.c b/drivers/net/intel/ice/ice_tm.c
-index 651d6aa932..48bc1f3942 100644
---- a/drivers/net/intel/ice/ice_tm.c
-+++ b/drivers/net/intel/ice/ice_tm.c
+diff --git a/drivers/net/ice/ice_tm.c b/drivers/net/ice/ice_tm.c
+index 149d1630589..c5d8bc04c7d 100644
+--- a/drivers/net/ice/ice_tm.c
++++ b/drivers/net/ice/ice_tm.c
More information about the stable
mailing list