* [PATCH v2 2/6] net/iavf: remove duplication in AVX-512 VLAN insert logic [not found] ` <20251105152642.2981673-1-ciara.loftus@intel.com> @ 2025-11-05 15:26 ` Ciara Loftus [not found] ` <20251106115016.3035639-1-ciara.loftus@intel.com> 1 sibling, 0 replies; 3+ messages in thread From: Ciara Loftus @ 2025-11-05 15:26 UTC (permalink / raw) To: dev; +Cc: Ciara Loftus, stable The part of the transmit descriptor that holds the L2TAG1 VLAN tag was potentially being written to twice on the AVX-512 context path. Fix this by removing one of the writes. Fixes: 4f8259df563a ("net/iavf: enable Tx outer checksum offload on AVX512") Cc: stable@dpdk.org Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> --- drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c | 66 ++++++------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c index d40a858413..28d83ca3ed 100644 --- a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c +++ b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c @@ -2127,63 +2127,37 @@ ctx_vtx(volatile struct iavf_tx_desc *txdp, ((uint64_t)pkt[0]->data_len << IAVF_TXD_QW1_TX_BUF_SZ_SHIFT); - if (pkt[1]->ol_flags & RTE_MBUF_F_TX_VLAN) { - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - hi_ctx_qw1 |= - IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - low_ctx_qw1 |= - (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - } else { - hi_data_qw1 |= - (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_QW1_L2TAG1_SHIFT; - } + if (pkt[1]->ol_flags & RTE_MBUF_F_TX_VLAN && + vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { + hi_ctx_qw1 |= + IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; + low_ctx_qw1 |= + (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (pkt[1]->ol_flags & RTE_MBUF_F_TX_QINQ) { + uint64_t qinq_tag = vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2 ? + (uint64_t)pkt[0]->vlan_tci_outer : + (uint64_t)pkt[0]->vlan_tci; hi_ctx_qw1 |= IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - /* Inner tag at L2TAG2, outer tag at L2TAG1. */ - low_ctx_qw1 |= (uint64_t)pkt[1]->vlan_tci << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw1 |= (uint64_t)pkt[1]->vlan_tci_outer << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } else { - /* Outer tag at L2TAG2, inner tag at L2TAG1. */ - low_ctx_qw1 |= (uint64_t)pkt[1]->vlan_tci_outer << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw1 |= (uint64_t)pkt[1]->vlan_tci << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } + low_ctx_qw1 |= qinq_tag << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (IAVF_CHECK_TX_LLDP(pkt[1])) hi_ctx_qw1 |= IAVF_TX_CTX_DESC_SWTCH_UPLINK << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (pkt[0]->ol_flags & RTE_MBUF_F_TX_VLAN) { - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - hi_ctx_qw0 |= - IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - low_ctx_qw0 |= - (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - } else { - hi_data_qw0 |= - (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_QW1_L2TAG1_SHIFT; - } + if (pkt[0]->ol_flags & RTE_MBUF_F_TX_VLAN && + vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { + hi_ctx_qw0 |= + IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; + low_ctx_qw0 |= + (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (pkt[0]->ol_flags & RTE_MBUF_F_TX_QINQ) { + uint64_t qinq_tag = vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2 ? + (uint64_t)pkt[0]->vlan_tci_outer : + (uint64_t)pkt[0]->vlan_tci; hi_ctx_qw0 |= IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - /* Inner tag at L2TAG2, outer tag at L2TAG1. */ - low_ctx_qw0 |= (uint64_t)pkt[0]->vlan_tci << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw0 |= (uint64_t)pkt[0]->vlan_tci_outer << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } else { - /* Outer tag at L2TAG2, inner tag at L2TAG1. */ - low_ctx_qw0 |= (uint64_t)pkt[0]->vlan_tci_outer << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw0 |= (uint64_t)pkt[0]->vlan_tci << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } + low_ctx_qw0 |= qinq_tag << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (IAVF_CHECK_TX_LLDP(pkt[0])) hi_ctx_qw0 |= IAVF_TX_CTX_DESC_SWTCH_UPLINK -- 2.34.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20251106115016.3035639-1-ciara.loftus@intel.com>]
* [PATCH v3 2/6] net/iavf: remove duplication in AVX-512 VLAN insert logic [not found] ` <20251106115016.3035639-1-ciara.loftus@intel.com> @ 2025-11-06 11:50 ` Ciara Loftus 2025-11-06 15:07 ` Bruce Richardson 0 siblings, 1 reply; 3+ messages in thread From: Ciara Loftus @ 2025-11-06 11:50 UTC (permalink / raw) To: dev; +Cc: Ciara Loftus, stable The part of the transmit descriptor that holds the L2TAG1 VLAN tag was potentially being written to twice on the AVX-512 context path. Fix this by removing one of the writes. Fixes: 4f8259df563a ("net/iavf: enable Tx outer checksum offload on AVX512") Cc: stable@dpdk.org Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> --- drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c | 66 ++++++------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c index d40a858413..28d83ca3ed 100644 --- a/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c +++ b/drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c @@ -2127,63 +2127,37 @@ ctx_vtx(volatile struct iavf_tx_desc *txdp, ((uint64_t)pkt[0]->data_len << IAVF_TXD_QW1_TX_BUF_SZ_SHIFT); - if (pkt[1]->ol_flags & RTE_MBUF_F_TX_VLAN) { - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - hi_ctx_qw1 |= - IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - low_ctx_qw1 |= - (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - } else { - hi_data_qw1 |= - (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_QW1_L2TAG1_SHIFT; - } + if (pkt[1]->ol_flags & RTE_MBUF_F_TX_VLAN && + vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { + hi_ctx_qw1 |= + IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; + low_ctx_qw1 |= + (uint64_t)pkt[1]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (pkt[1]->ol_flags & RTE_MBUF_F_TX_QINQ) { + uint64_t qinq_tag = vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2 ? + (uint64_t)pkt[0]->vlan_tci_outer : + (uint64_t)pkt[0]->vlan_tci; hi_ctx_qw1 |= IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - /* Inner tag at L2TAG2, outer tag at L2TAG1. */ - low_ctx_qw1 |= (uint64_t)pkt[1]->vlan_tci << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw1 |= (uint64_t)pkt[1]->vlan_tci_outer << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } else { - /* Outer tag at L2TAG2, inner tag at L2TAG1. */ - low_ctx_qw1 |= (uint64_t)pkt[1]->vlan_tci_outer << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw1 |= (uint64_t)pkt[1]->vlan_tci << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } + low_ctx_qw1 |= qinq_tag << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (IAVF_CHECK_TX_LLDP(pkt[1])) hi_ctx_qw1 |= IAVF_TX_CTX_DESC_SWTCH_UPLINK << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (pkt[0]->ol_flags & RTE_MBUF_F_TX_VLAN) { - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - hi_ctx_qw0 |= - IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - low_ctx_qw0 |= - (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - } else { - hi_data_qw0 |= - (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_QW1_L2TAG1_SHIFT; - } + if (pkt[0]->ol_flags & RTE_MBUF_F_TX_VLAN && + vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { + hi_ctx_qw0 |= + IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; + low_ctx_qw0 |= + (uint64_t)pkt[0]->vlan_tci << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (pkt[0]->ol_flags & RTE_MBUF_F_TX_QINQ) { + uint64_t qinq_tag = vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2 ? + (uint64_t)pkt[0]->vlan_tci_outer : + (uint64_t)pkt[0]->vlan_tci; hi_ctx_qw0 |= IAVF_TX_CTX_DESC_IL2TAG2 << IAVF_TXD_CTX_QW1_CMD_SHIFT; - if (vlan_flag & IAVF_TX_FLAGS_VLAN_TAG_LOC_L2TAG2) { - /* Inner tag at L2TAG2, outer tag at L2TAG1. */ - low_ctx_qw0 |= (uint64_t)pkt[0]->vlan_tci << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw0 |= (uint64_t)pkt[0]->vlan_tci_outer << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } else { - /* Outer tag at L2TAG2, inner tag at L2TAG1. */ - low_ctx_qw0 |= (uint64_t)pkt[0]->vlan_tci_outer << - IAVF_TXD_CTX_QW0_L2TAG2_PARAM; - hi_data_qw0 |= (uint64_t)pkt[0]->vlan_tci << - IAVF_TXD_QW1_L2TAG1_SHIFT; - } + low_ctx_qw0 |= qinq_tag << IAVF_TXD_CTX_QW0_L2TAG2_PARAM; } if (IAVF_CHECK_TX_LLDP(pkt[0])) hi_ctx_qw0 |= IAVF_TX_CTX_DESC_SWTCH_UPLINK -- 2.34.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v3 2/6] net/iavf: remove duplication in AVX-512 VLAN insert logic 2025-11-06 11:50 ` [PATCH v3 " Ciara Loftus @ 2025-11-06 15:07 ` Bruce Richardson 0 siblings, 0 replies; 3+ messages in thread From: Bruce Richardson @ 2025-11-06 15:07 UTC (permalink / raw) To: Ciara Loftus; +Cc: dev, stable On Thu, Nov 06, 2025 at 11:50:12AM +0000, Ciara Loftus wrote: > The part of the transmit descriptor that holds the L2TAG1 VLAN tag was > potentially being written to twice on the AVX-512 context path. Fix this > by removing one of the writes. > > Fixes: 4f8259df563a ("net/iavf: enable Tx outer checksum offload on AVX512") > Cc: stable@dpdk.org > > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> > --- > drivers/net/intel/iavf/iavf_rxtx_vec_avx512.c | 66 ++++++------------- > 1 file changed, 20 insertions(+), 46 deletions(-) > Acked-by: Bruce Richardson <bruce.richardson@intel.com> ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-06 15:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20251031152250.2441980-1-ciara.loftus@intel.com>
[not found] ` <20251105152642.2981673-1-ciara.loftus@intel.com>
2025-11-05 15:26 ` [PATCH v2 2/6] net/iavf: remove duplication in AVX-512 VLAN insert logic Ciara Loftus
[not found] ` <20251106115016.3035639-1-ciara.loftus@intel.com>
2025-11-06 11:50 ` [PATCH v3 " Ciara Loftus
2025-11-06 15:07 ` Bruce Richardson
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).