[PATCH] net/ice: fix inconsistency in Rx queue VLAN tag placement
Bruce Richardson
bruce.richardson at intel.com
Fri Jun 27 15:52:01 CEST 2025
When VLAN or QinQ stripping is enabled in the ice driver, an
inconsistency was observed between the placement of the VLAN tag in the
descriptors of the final Rx queue (irrespective of the number of queues)
vs descriptors of all other queues. This inconsistency was due to the
fact that the driver - when updating l2tsel (L2 tag selection) field -
used the queue id, rather than the register index for the queue. Queue 0
is normally HW queue 1, etc., meaning the final queue never had its
field updated.
Fixes: de5da9d16430 ("net/ice: support double VLAN")
Cc: stable at dpdk.org
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
---
drivers/net/intel/ice/ice_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
index 680e7724cd..513777e372 100644
--- a/drivers/net/intel/ice/ice_ethdev.c
+++ b/drivers/net/intel/ice/ice_ethdev.c
@@ -4988,11 +4988,11 @@ static void ice_vsi_update_l2tsel(struct ice_vsi *vsi, enum ice_l2tsel l2tsel)
l2tsel_bit = BIT(ICE_L2TSEL_BIT_OFFSET);
for (i = 0; i < dev_data->nb_rx_queues; i++) {
+ const struct ci_rx_queue *rxq = dev_data->rx_queues[i];
u32 qrx_context_offset;
u32 regval;
- qrx_context_offset =
- QRX_CONTEXT(ICE_L2TSEL_QRX_CONTEXT_REG_IDX, i);
+ qrx_context_offset = QRX_CONTEXT(ICE_L2TSEL_QRX_CONTEXT_REG_IDX, rxq->reg_idx);
regval = rd32(hw, qrx_context_offset);
regval &= ~BIT(ICE_L2TSEL_BIT_OFFSET);
--
2.48.1
More information about the stable
mailing list