From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1338BA04F0 for ; Thu, 19 Dec 2019 15:41:34 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 05EF01BDFD; Thu, 19 Dec 2019 15:41:34 +0100 (CET) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id 1BA561BDFD for ; Thu, 19 Dec 2019 15:41:33 +0100 (CET) Received: by mail-wm1-f66.google.com with SMTP id d73so5696774wmd.1 for ; Thu, 19 Dec 2019 06:41:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MRjeEkxGSLjuoFomW8ibMZgxx0tSVkAlDiEmOAiE+7k=; b=JdoxM5g2VUy/yDGgqcoUTOkx/zXTJVgfoSHOE1yv/foq2HiO73ZFKcNczkQ8SCj1KW tOpUcjlEYUPfSihpvp55jbE+1Q9PAoHfF6djLV03ihW6cxS+heBbZU+kJ6a2ky0BgC8r UTw1MJEbcCh0Hckn7c7knfOvDAyeSHfXdG7dFenUcNcRZam3IlZRlTH5v0OsMGOO3bUZ twJVCX/X478o5mRF92TBui05r93gkZYLDVcAwFL3sX7+ndbP0g1any4yq7kg37Az3EJU JfrIbWtFRKlwD93VvAQxbQSl18Miok6XbpbK+Fp+ZT9eL6pMk/uY3B3lmlkgYdRxZLi9 MYtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MRjeEkxGSLjuoFomW8ibMZgxx0tSVkAlDiEmOAiE+7k=; b=uYxMh9FK7m0LX95ta72HmdhzVMq19SkF+SzRZZPM/fDD+zu0LJ72dEEwMjB9joperP qD6kw8CCniPLv1ur5Q9MZS/Ebom8LZwdHGIr0Ydu3bMsrrmAtcf7v/MF2gEyK1VyyGMK JMu/NqvgGDZqg06y9D8/EOBaw8skbVLCKMgZfqrzkg/uONZUZp8WvSwm3vO9+3tn7yP7 VOa6zVJdD3nfSEk+r2AXYpEAlmHL7Ocytb23oMmR/sE9zIOn6sTfd70W4EkBLPGdGPVa qPjgfLUebvUABTULyDYhpyOnMcPinf9yQp71Y56b2/KTqNJnvzUM3GdCGFUgQnCz9Lqh 7KTQ== X-Gm-Message-State: APjAAAXvGPUT8q/2F+Omvf4HM2IDOtlG9jfpDl8xOfYJOM1/cFhZdH64 SEoS6W+2QrxuG9HCE9IybCc= X-Google-Smtp-Source: APXvYqz43ZykCNkTQcyOvOHo2z7jfNrjXUiNmRUar6bPL/N5RnIzYuWZnp7xKf6uqFNUMCPSGDtcaQ== X-Received: by 2002:a05:600c:1:: with SMTP id g1mr9997456wmc.131.1576766492798; Thu, 19 Dec 2019 06:41:32 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id k13sm6576721wrx.59.2019.12.19.06.41.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Dec 2019 06:41:32 -0800 (PST) From: luca.boccassi@gmail.com To: Ruifeng Wang Cc: Gavin Hu , Ferruh Yigit , dpdk stable Date: Thu, 19 Dec 2019 14:34:19 +0000 Message-Id: <20191219143447.21506-112-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191219143447.21506-1-luca.boccassi@gmail.com> References: <20191219143447.21506-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/ixgbe: support packet type with NEON' has been queued to LTS release 17.11.10 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "stable" Hi, FYI, your patch has been queued to LTS release 17.11.10 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/21/19. 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. Thanks. Luca Boccassi --- >From 3a9454f74848a4ca6f36f36b16272b7d3a50c4f1 Mon Sep 17 00:00:00 2001 From: Ruifeng Wang Date: Thu, 24 Oct 2019 10:58:02 +0800 Subject: [PATCH] net/ixgbe: support packet type with NEON [ upstream commit 41fdc03e72c55ac7f28f0d52f3c1935a19015180 ] Ptype parse is missing in aarch64 vector PMD. It makes packet type info provided by NIC get lost, thus requires extra CPU cycles to do this. Add the parse process to utilize NIC hardware capability. In test with l3fwd (removed port conf DEV_RX_OFFLOAD_CHECKSUM), observed over 3% performance gain. Fixes: b20971b6cca0 ("net/ixgbe: implement vector driver for ARM") Signed-off-by: Ruifeng Wang Reviewed-by: Gavin Hu Reviewed-by: Ferruh Yigit --- drivers/net/ixgbe/ixgbe_ethdev.c | 2 +- drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 64 +++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 6f8cfd9b00..ca7109e6f0 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -3822,7 +3822,7 @@ ixgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev) dev->rx_pkt_burst == ixgbe_recv_pkts_bulk_alloc) return ptypes; -#if defined(RTE_ARCH_X86) +#if defined(RTE_ARCH_X86) || defined(RTE_MACHINE_CPUFLAG_NEON) if (dev->rx_pkt_burst == ixgbe_recv_pkts_vec || dev->rx_pkt_burst == ixgbe_recv_scattered_pkts_vec) return ptypes; diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c index 0b38d97fa0..fd01d97e6f 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c +++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c @@ -174,6 +174,68 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2, #define IXGBE_VPMD_DESC_DD_MASK 0x01010101 #define IXGBE_VPMD_DESC_EOP_MASK 0x02020202 +static inline uint32_t +get_packet_type(uint32_t pkt_info, + uint32_t etqf_check, + uint32_t tunnel_check) +{ + if (etqf_check) + return RTE_PTYPE_UNKNOWN; + + if (tunnel_check) { + pkt_info &= IXGBE_PACKET_TYPE_MASK_TUNNEL; + return ptype_table_tn[pkt_info]; + } + + pkt_info &= IXGBE_PACKET_TYPE_MASK_82599; + return ptype_table[pkt_info]; +} + +static inline void +desc_to_ptype_v(uint64x2_t descs[4], uint16_t pkt_type_mask, + struct rte_mbuf **rx_pkts) +{ + uint32x4_t etqf_check, tunnel_check; + uint32x4_t etqf_mask = vdupq_n_u32(0x8000); + uint32x4_t tunnel_mask = vdupq_n_u32(0x10000); + uint32x4_t ptype_mask = vdupq_n_u32((uint32_t)pkt_type_mask); + uint32x4_t ptype0 = vzipq_u32(vreinterpretq_u32_u64(descs[0]), + vreinterpretq_u32_u64(descs[2])).val[0]; + uint32x4_t ptype1 = vzipq_u32(vreinterpretq_u32_u64(descs[1]), + vreinterpretq_u32_u64(descs[3])).val[0]; + + /* interleave low 32 bits, + * now we have 4 ptypes in a NEON register + */ + ptype0 = vzipq_u32(ptype0, ptype1).val[0]; + + /* mask etqf bits */ + etqf_check = vandq_u32(ptype0, etqf_mask); + /* mask tunnel bits */ + tunnel_check = vandq_u32(ptype0, tunnel_mask); + + /* shift right by IXGBE_PACKET_TYPE_SHIFT, and apply ptype mask */ + ptype0 = vandq_u32(vshrq_n_u32(ptype0, IXGBE_PACKET_TYPE_SHIFT), + ptype_mask); + + rx_pkts[0]->packet_type = + get_packet_type(vgetq_lane_u32(ptype0, 0), + vgetq_lane_u32(etqf_check, 0), + vgetq_lane_u32(tunnel_check, 0)); + rx_pkts[1]->packet_type = + get_packet_type(vgetq_lane_u32(ptype0, 1), + vgetq_lane_u32(etqf_check, 1), + vgetq_lane_u32(tunnel_check, 1)); + rx_pkts[2]->packet_type = + get_packet_type(vgetq_lane_u32(ptype0, 2), + vgetq_lane_u32(etqf_check, 2), + vgetq_lane_u32(tunnel_check, 2)); + rx_pkts[3]->packet_type = + get_packet_type(vgetq_lane_u32(ptype0, 3), + vgetq_lane_u32(etqf_check, 3), + vgetq_lane_u32(tunnel_check, 3)); +} + static inline uint16_t _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts, uint8_t *split_packet) @@ -325,6 +387,8 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, vst1q_u8((uint8_t *)&rx_pkts[pos]->rx_descriptor_fields1, pkt_mb1); + desc_to_ptype_v(descs, rxq->pkt_type_mask, &rx_pkts[pos]); + stat &= IXGBE_VPMD_DESC_DD_MASK; /* C.4 calc avaialbe number of desc */ -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-12-19 14:32:30.771234016 +0000 +++ 0112-net-ixgbe-support-packet-type-with-NEON.patch 2019-12-19 14:32:26.277301236 +0000 @@ -1,8 +1,10 @@ -From 41fdc03e72c55ac7f28f0d52f3c1935a19015180 Mon Sep 17 00:00:00 2001 +From 3a9454f74848a4ca6f36f36b16272b7d3a50c4f1 Mon Sep 17 00:00:00 2001 From: Ruifeng Wang Date: Thu, 24 Oct 2019 10:58:02 +0800 Subject: [PATCH] net/ixgbe: support packet type with NEON +[ upstream commit 41fdc03e72c55ac7f28f0d52f3c1935a19015180 ] + Ptype parse is missing in aarch64 vector PMD. It makes packet type info provided by NIC get lost, thus requires extra CPU cycles to do this. Add the parse process to utilize NIC hardware capability. @@ -11,7 +13,6 @@ observed over 3% performance gain. Fixes: b20971b6cca0 ("net/ixgbe: implement vector driver for ARM") -Cc: stable@dpdk.org Signed-off-by: Ruifeng Wang Reviewed-by: Gavin Hu @@ -22,10 +23,10 @@ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c -index dbce7a80e9..3c7624f3a1 100644 +index 6f8cfd9b00..ca7109e6f0 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c -@@ -3908,7 +3908,7 @@ ixgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev) +@@ -3822,7 +3822,7 @@ ixgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev) dev->rx_pkt_burst == ixgbe_recv_pkts_bulk_alloc) return ptypes; @@ -35,12 +36,12 @@ dev->rx_pkt_burst == ixgbe_recv_scattered_pkts_vec) return ptypes; diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c -index 26c0ef5aec..ee11fab96a 100644 +index 0b38d97fa0..fd01d97e6f 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c +++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c -@@ -146,6 +146,68 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2, +@@ -174,6 +174,68 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2, + #define IXGBE_VPMD_DESC_DD_MASK 0x01010101 #define IXGBE_VPMD_DESC_EOP_MASK 0x02020202 - #define IXGBE_UINT8_BIT (CHAR_BIT * sizeof(uint8_t)) +static inline uint32_t +get_packet_type(uint32_t pkt_info, @@ -107,15 +108,15 @@ static inline uint16_t _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts, uint8_t *split_packet) -@@ -303,6 +365,8 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, +@@ -325,6 +387,8 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts, vst1q_u8((uint8_t *)&rx_pkts[pos]->rx_descriptor_fields1, pkt_mb1); + desc_to_ptype_v(descs, rxq->pkt_type_mask, &rx_pkts[pos]); + - /* C.5 calc available number of desc */ - if (unlikely(stat == 0)) { - nb_pkts_recd += RTE_IXGBE_DESCS_PER_LOOP; + stat &= IXGBE_VPMD_DESC_DD_MASK; + + /* C.4 calc avaialbe number of desc */ -- 2.20.1