[PATCH v2 11/20] net/txgbe: fix traffic class priority configuration

Stephen Hemminger stephen at networkplumber.org
Wed Apr 29 17:11:36 CEST 2026


On Wed, 29 Apr 2026 18:25:05 +0800
Zaiyu Wang <zaiyuwang at trustnetic.com> wrote:

> After applying the following testpmd command, 802.1Q packets with specific
> priorities were not properly directed to the corresponding traffic classes:
>     port config 0 dcb vt off 4 pfc off
> 
> The old driver had two issues:
> 1. The hardware uses a 4-bit mapping register per traffic class for
>    priority-to-TC mapping, but the driver incorrectly configured it
>    as 3 bits.
> 2. The DCB TX configuration mistakenly wrote to the RX register.
> 
> Fix both issues, ensuring that tc-prio mapping works as expected.
> 
> Fixes: 8bdc7882f376 ("net/txgbe: support DCB")
> Cc: stable at dpdk.org
> 
> Signed-off-by: Zaiyu Wang <zaiyuwang at trustnetic.com>
> ---

AI review spotted issues:

Error: The fix is incomplete. The same priority-to-TC layout is also written in drivers/net/txgbe/txgbe_rxtx.c around line 3380 in txgbe_vmdq_dcb_configure():
for (i = 0; i < RTE_ETH_DCB_NUM_USER_PRIORITIES; i++)
	/*
	 * mapping is done with 3 bits per priority,
	 * so shift by i*3 each time
	 */
	queue_mapping |= ((cfg->dcb_tc[i] & 0x07) << (i * 3));

wr32(hw, TXGBE_RPUP2TC, queue_mapping);
This writes the same TXGBE_RPUP2TC register (0x019008) the patch is fixing, using a hardcoded i*3 shift and a comment claiming 3 bits per priority. After this patch, txgbe_dcb_config_rx_arbiter_raptor() encodes priorities at 4-bit positions (via the updated TXGBE_RPUP2TC_UP_SHIFT=4), but txgbe_vmdq_dcb_configure() still uses 3-bit positions. The VMDQ+DCB path will produce a wrong tc-prio mapping. txgbe_vmdq_dcb_configure() needs the same fix (use TXGBE_RPUP2TC_UP_SHIFT and update the comment).
Warning: TXGBE_DCBUP2TC_DEC and TXGBE_DCBUP2TC_MAP are now inconsistent. After this patch:
#define TXGBE_DCBUP2TC_MAP(tc, v)     LS(v, 4 * (tc), 0x7)
#define TXGBE_DCBUP2TC_DEC(tc, r)     RS(r, 3 * (tc), 0x7)
DEC will not decode what MAP encoded for any tc > 0. TXGBE_DCBUP2TC_DEC isn't currently used in tree, so this is not a runtime bug, but it's a latent trap. Either update DEC to also use 4*(tc), or remove DEC since it has no callers.


More information about the stable mailing list