From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BADEBA054A for ; Tue, 25 Oct 2022 17:09:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B603442C49; Tue, 25 Oct 2022 17:09:30 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id BE5B142C1D for ; Tue, 25 Oct 2022 17:09:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1666710569; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=oK+hrpi5VBGSqYN13I1LdlJVkifNaAZHQE8QdYLUd2A=; b=W2ffvLndj5O4O8R+PN1YbgzzAkA0RBdZnmSAJ9RC6TGzzT5lCYBUnKy+XpU8RfStKqfqIP 06fstkQ3V6r5F8dtIjtJb/2JiIE0lnsaa6B1P7yVUUORxVnwCQCqQRSoCNsDLP9iMfBON5 dUj+sj0af4qG0S7IyY4dzXSJV0uBdx4= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-356-XTc3X2cNPDGrJw5AVOeOww-1; Tue, 25 Oct 2022 11:09:24 -0400 X-MC-Unique: XTc3X2cNPDGrJw5AVOeOww-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1FB8D803D48; Tue, 25 Oct 2022 15:09:24 +0000 (UTC) Received: from rh.redhat.com (unknown [10.39.192.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id 46D3749BB60; Tue, 25 Oct 2022 15:09:23 +0000 (UTC) From: Kevin Traynor To: Zhichao Zeng Cc: Qi Zhang , dpdk stable Subject: patch 'net/iavf: fix processing VLAN TCI in SSE path' has been queued to stable release 21.11.3 Date: Tue, 25 Oct 2022 16:06:56 +0100 Message-Id: <20221025150734.142189-61-ktraynor@redhat.com> In-Reply-To: <20221025150734.142189-1-ktraynor@redhat.com> References: <20221025150734.142189-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 21.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/01/22. 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/kevintraynor/dpdk-stable This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable/commit/5f0b3890df9cfc9192aa83c8a33f7001a40fd0d9 Thanks. Kevin --- >From 5f0b3890df9cfc9192aa83c8a33f7001a40fd0d9 Mon Sep 17 00:00:00 2001 From: Zhichao Zeng Date: Tue, 13 Sep 2022 17:28:41 +0800 Subject: [PATCH] net/iavf: fix processing VLAN TCI in SSE path [ upstream commit 1aaacea174ebce7fa28b9fa375442f1ae7de4a5e ] The SSE RX path does not process the vlan tci correctly when it's stored in L2TAG2, so the vlan tci could not be extracted from descriptor, then would not be put into mbuf either. Add processing when vlan tci is stored in L2TAG2. Fixes: 1162f5a0ef31 ("net/iavf: support flexible Rx descriptor in SSE path") Signed-off-by: Zhichao Zeng Acked-by: Qi Zhang --- drivers/net/iavf/iavf_rxtx_vec_sse.c | 93 +++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 15 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx_vec_sse.c b/drivers/net/iavf/iavf_rxtx_vec_sse.c index 4b23ca8d82..15cef0d518 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_sse.c +++ b/drivers/net/iavf/iavf_rxtx_vec_sse.c @@ -209,7 +209,13 @@ flex_rxd_to_fdir_flags_vec(const __m128i fdir_id0_3) } +#ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC +static inline void +flex_desc_to_olflags_v(struct iavf_rx_queue *rxq, __m128i descs[4], __m128i descs_bh[4], + struct rte_mbuf **rx_pkts) +#else static inline void flex_desc_to_olflags_v(struct iavf_rx_queue *rxq, __m128i descs[4], struct rte_mbuf **rx_pkts) +#endif { const __m128i mbuf_init = _mm_set_epi64x(0, rxq->mbuf_initializer); @@ -287,4 +293,37 @@ flex_desc_to_olflags_v(struct iavf_rx_queue *rxq, __m128i descs[4], flags = _mm_or_si128(flags, rss_vlan); +#ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC + if (rxq->rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { + const __m128i l2tag2_mask = + _mm_set1_epi32(1 << IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S); + + const __m128i vlan_tci0_1 = + _mm_unpacklo_epi32(descs_bh[0], descs_bh[1]); + const __m128i vlan_tci2_3 = + _mm_unpacklo_epi32(descs_bh[2], descs_bh[3]); + const __m128i vlan_tci0_3 = + _mm_unpacklo_epi64(vlan_tci0_1, vlan_tci2_3); + + __m128i vlan_bits = _mm_and_si128(vlan_tci0_3, l2tag2_mask); + + vlan_bits = _mm_srli_epi32(vlan_bits, + IAVF_RX_FLEX_DESC_STATUS1_L2TAG2P_S); + + const __m128i vlan_flags_shuf = + _mm_set_epi8(0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, + RTE_MBUF_F_RX_VLAN | + RTE_MBUF_F_RX_VLAN_STRIPPED, + 0); + + const __m128i vlan_flags = _mm_shuffle_epi8(vlan_flags_shuf, vlan_bits); + + /* merge with vlan_flags */ + flags = _mm_or_si128(flags, vlan_flags); + } +#endif + if (rxq->fdir_enabled) { const __m128i fdir_id0_1 = @@ -749,4 +788,7 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, rxdp += IAVF_VPMD_DESCS_PER_LOOP) { __m128i descs[IAVF_VPMD_DESCS_PER_LOOP]; +#ifndef RTE_LIBRTE_IAVF_16BYTE_RX_DESC + __m128i descs_bh[IAVF_VPMD_DESCS_PER_LOOP]; +#endif __m128i pkt_mb0, pkt_mb1, pkt_mb2, pkt_mb3; __m128i staterr, sterr_tmp1, sterr_tmp2; @@ -807,6 +849,4 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, sterr_tmp1 = _mm_unpackhi_epi32(descs[1], descs[0]); - flex_desc_to_olflags_v(rxq, descs, &rx_pkts[pos]); - /* D.2 pkt 3,4 set in_port/nb_seg and remove crc */ pkt_mb3 = _mm_add_epi16(pkt_mb3, crc_adjust); @@ -822,22 +862,21 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, * will cause performance drop to get into this context. */ - if (offloads & RTE_ETH_RX_OFFLOAD_RSS_HASH) { + if (offloads & RTE_ETH_RX_OFFLOAD_RSS_HASH || + rxq->rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { /* load bottom half of every 32B desc */ - const __m128i raw_desc_bh3 = - _mm_load_si128 + descs_bh[3] = _mm_load_si128 ((void *)(&rxdp[3].wb.status_error1)); rte_compiler_barrier(); - const __m128i raw_desc_bh2 = - _mm_load_si128 + descs_bh[2] = _mm_load_si128 ((void *)(&rxdp[2].wb.status_error1)); rte_compiler_barrier(); - const __m128i raw_desc_bh1 = - _mm_load_si128 + descs_bh[1] = _mm_load_si128 ((void *)(&rxdp[1].wb.status_error1)); rte_compiler_barrier(); - const __m128i raw_desc_bh0 = - _mm_load_si128 + descs_bh[0] = _mm_load_si128 ((void *)(&rxdp[0].wb.status_error1)); + } + if (offloads & RTE_ETH_RX_OFFLOAD_RSS_HASH) { /** * to shift the 32b RSS hash value to the @@ -845,11 +884,11 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, */ __m128i rss_hash3 = - _mm_slli_epi64(raw_desc_bh3, 32); + _mm_slli_epi64(descs_bh[3], 32); __m128i rss_hash2 = - _mm_slli_epi64(raw_desc_bh2, 32); + _mm_slli_epi64(descs_bh[2], 32); __m128i rss_hash1 = - _mm_slli_epi64(raw_desc_bh1, 32); + _mm_slli_epi64(descs_bh[1], 32); __m128i rss_hash0 = - _mm_slli_epi64(raw_desc_bh0, 32); + _mm_slli_epi64(descs_bh[0], 32); __m128i rss_hash_msk = @@ -870,4 +909,28 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, pkt_mb0 = _mm_or_si128(pkt_mb0, rss_hash0); } /* if() on RSS hash parsing */ + + if (rxq->rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { + /* L2TAG2_2 */ + __m128i vlan_tci3 = _mm_slli_si128(descs_bh[3], 4); + __m128i vlan_tci2 = _mm_slli_si128(descs_bh[2], 4); + __m128i vlan_tci1 = _mm_slli_si128(descs_bh[1], 4); + __m128i vlan_tci0 = _mm_slli_si128(descs_bh[0], 4); + + const __m128i vlan_tci_msk = _mm_set_epi32(0, 0xFFFF0000, 0, 0); + + vlan_tci3 = _mm_and_si128(vlan_tci3, vlan_tci_msk); + vlan_tci2 = _mm_and_si128(vlan_tci2, vlan_tci_msk); + vlan_tci1 = _mm_and_si128(vlan_tci1, vlan_tci_msk); + vlan_tci0 = _mm_and_si128(vlan_tci0, vlan_tci_msk); + + pkt_mb3 = _mm_or_si128(pkt_mb3, vlan_tci3); + pkt_mb2 = _mm_or_si128(pkt_mb2, vlan_tci2); + pkt_mb1 = _mm_or_si128(pkt_mb1, vlan_tci1); + pkt_mb0 = _mm_or_si128(pkt_mb0, vlan_tci0); + } + + flex_desc_to_olflags_v(rxq, descs, descs_bh, &rx_pkts[pos]); +#else + flex_desc_to_olflags_v(rxq, descs, &rx_pkts[pos]); #endif -- 2.37.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2022-10-25 14:18:59.927938278 +0100 +++ 0061-net-iavf-fix-processing-VLAN-TCI-in-SSE-path.patch 2022-10-25 14:18:58.461798270 +0100 @@ -1 +1 @@ -From 1aaacea174ebce7fa28b9fa375442f1ae7de4a5e Mon Sep 17 00:00:00 2001 +From 5f0b3890df9cfc9192aa83c8a33f7001a40fd0d9 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 1aaacea174ebce7fa28b9fa375442f1ae7de4a5e ] + @@ -13 +14,0 @@ -Cc: stable@dpdk.org @@ -22 +23 @@ -index 4a5232c1d2..17eed21f70 100644 +index 4b23ca8d82..15cef0d518 100644