DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Loftus, Ciara" <ciara.loftus@intel.com>
To: "Richardson, Bruce" <bruce.richardson@intel.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: "Richardson, Bruce" <bruce.richardson@intel.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Subject: RE: [PATCH v2] net/intel: fix assumption about tag placement order
Date: Thu, 7 Aug 2025 14:31:11 +0000	[thread overview]
Message-ID: <DM3PPF7D18F34A1F6C722854325BC750B9C8E2CA@DM3PPF7D18F34A1.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20250718154312.1716432-1-bruce.richardson@intel.com>

> 
> The specific placement of outer/inner VLAN tags in NIC descriptors
> is configurable. Therefore, remove the assumption that if the L2Tag2
> field is filled in, that the L2Tag1 must also be. Instead, check the
> existing mbuf VLAN flags, and move tags and set flags as appropriate.
> This fixes an issue where, with QinQ packets with different Tag ethtypes
> (0x88a8 vs 0x8100), we get an mbuf reporting two valid tags, but only
> having had one tag stripped.
> 
> Fixes: cc9d0456b870 ("i40e: support double vlan stripping and insertion")
> Fixes: 1e728b01120c ("net/iavf: rework Tx path")
> Fixes: e0dcf94a0d7f ("net/ice: support VLAN ops")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>  drivers/net/intel/i40e/i40e_rxtx.c | 10 +++++++---
>  drivers/net/intel/iavf/iavf_rxtx.c | 12 +++++++-----
>  drivers/net/intel/ice/ice_rxtx.c   | 10 +++++++---
>  3 files changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/intel/i40e/i40e_rxtx.c
> b/drivers/net/intel/i40e/i40e_rxtx.c
> index aba3c11ee5..a1fc320d05 100644
> --- a/drivers/net/intel/i40e/i40e_rxtx.c
> +++ b/drivers/net/intel/i40e/i40e_rxtx.c
> @@ -128,9 +128,13 @@ i40e_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile
> union ci_rx_desc *rxdp)
>  #ifndef RTE_NET_INTEL_USE_16BYTE_DESC
>  	if (rte_le_to_cpu_16(rxdp->wb.qword2.ext_status) &
>  		(1 << I40E_RX_DESC_EXT_STATUS_L2TAG2P_SHIFT)) {
> -		mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> RTE_MBUF_F_RX_QINQ |
> -			RTE_MBUF_F_RX_VLAN_STRIPPED |
> RTE_MBUF_F_RX_VLAN;
> -		mb->vlan_tci_outer = mb->vlan_tci;
> +		if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
> +			mb->ol_flags |= RTE_MBUF_F_RX_VLAN |
> RTE_MBUF_F_RX_VLAN_STRIPPED;
> +		} else {
> +			/* if two tags, move Tag1 to outer tag field */
> +			mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> RTE_MBUF_F_RX_QINQ;
> +			mb->vlan_tci_outer = mb->vlan_tci;
> +		}
>  		mb->vlan_tci = rte_le_to_cpu_16(rxdp-
> >wb.qword2.l2tag2_2);
>  		PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2:
> %u",
>  			   rte_le_to_cpu_16(rxdp->wb.qword2.l2tag2_1),
> diff --git a/drivers/net/intel/iavf/iavf_rxtx.c
> b/drivers/net/intel/iavf/iavf_rxtx.c
> index 7033a74610..887dcd1b2f 100644
> --- a/drivers/net/intel/iavf/iavf_rxtx.c
> +++ b/drivers/net/intel/iavf/iavf_rxtx.c
> @@ -1169,11 +1169,13 @@ iavf_flex_rxd_to_vlan_tci(struct rte_mbuf *mb,
> 
>  	if (rte_le_to_cpu_16(rxdp->wb.status_error1) &
>  	    (1 << IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) {
> -		mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> -				RTE_MBUF_F_RX_QINQ |
> -				RTE_MBUF_F_RX_VLAN_STRIPPED |
> -				RTE_MBUF_F_RX_VLAN;
> -		mb->vlan_tci_outer = mb->vlan_tci;
> +		if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
> +			mb->ol_flags |= RTE_MBUF_F_RX_VLAN |
> RTE_MBUF_F_RX_VLAN_STRIPPED;
> +		} else {
> +			/* if two tags, move Tag1 to outer tag field */
> +			mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> RTE_MBUF_F_RX_QINQ;
> +			mb->vlan_tci_outer = mb->vlan_tci;
> +		}
>  		mb->vlan_tci = rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd);
>  		PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2:
> %u",
>  			   rte_le_to_cpu_16(rxdp->wb.l2tag2_1st),
> diff --git a/drivers/net/intel/ice/ice_rxtx.c b/drivers/net/intel/ice/ice_rxtx.c
> index da508592aa..f965aab6ee 100644
> --- a/drivers/net/intel/ice/ice_rxtx.c
> +++ b/drivers/net/intel/ice/ice_rxtx.c
> @@ -1835,9 +1835,13 @@ ice_rxd_to_vlan_tci(struct rte_mbuf *mb, volatile
> union ci_rx_flex_desc *rxdp)
>  #ifndef RTE_NET_INTEL_USE_16BYTE_DESC
>  	if (rte_le_to_cpu_16(rxdp->wb.status_error1) &
>  	    (1 << ICE_RX_FLEX_DESC_STATUS1_L2TAG2P_S)) {
> -		mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> RTE_MBUF_F_RX_QINQ |
> -				RTE_MBUF_F_RX_VLAN_STRIPPED |
> RTE_MBUF_F_RX_VLAN;
> -		mb->vlan_tci_outer = mb->vlan_tci;
> +		if ((mb->ol_flags & RTE_MBUF_F_RX_VLAN_STRIPPED) == 0) {
> +			mb->ol_flags |= RTE_MBUF_F_RX_VLAN |
> RTE_MBUF_F_RX_VLAN_STRIPPED;
> +		} else {
> +			/* if two tags, move Tag1 to outer tag field */
> +			mb->ol_flags |= RTE_MBUF_F_RX_QINQ_STRIPPED |
> RTE_MBUF_F_RX_QINQ;
> +			mb->vlan_tci_outer = mb->vlan_tci;
> +		}
>  		mb->vlan_tci = rte_le_to_cpu_16(rxdp->wb.l2tag2_2nd);
>  		PMD_RX_LOG(DEBUG, "Descriptor l2tag2_1: %u, l2tag2_2:
> %u",
>  			   rte_le_to_cpu_16(rxdp->wb.l2tag2_1st),
> --
> 2.48.1

Acked-by: Ciara Loftus <ciara.loftus@intel.com>


  reply	other threads:[~2025-08-07 14:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-16 17:39 [PATCH] net/ice: " Bruce Richardson
2025-07-17  8:19 ` David Marchand
2025-07-17  8:32   ` Bruce Richardson
2025-07-17  8:36     ` David Marchand
2025-07-18 15:43 ` [PATCH v2] net/intel: " Bruce Richardson
2025-08-07 14:31   ` Loftus, Ciara [this message]
2025-08-07 18:59     ` Bruce Richardson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DM3PPF7D18F34A1F6C722854325BC750B9C8E2CA@DM3PPF7D18F34A1.namprd11.prod.outlook.com \
    --to=ciara.loftus@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).