DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector
@ 2020-11-18  6:29 Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm Feifei Wang
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  6:29 UTC (permalink / raw)
  Cc: dev, nd, Feifei Wang

This patch series are mainly to enable checksum offloading for IXGBE NEON
vector PMD, including good and bad checksum flags. In the meanwhile, the
first patch enable VLAN stripping flag for Arm.

Feifei Wang (4):
  net/ixgbe: add VLAN stripping support for Arm
  net/ixgbe: support checksum flags for NEON vector
  net/ixgbe: implement good checksum flag for NEON vector
  net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set

 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 94 ++++++++++++++++++-------
 1 file changed, 68 insertions(+), 26 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm
  2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
@ 2020-11-18  6:29 ` Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector Feifei Wang
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  6:29 UTC (permalink / raw)
  To: Jerin Jacob, Ruifeng Wang, Jeff Guo, Haiyue Wang; +Cc: dev, nd, Feifei Wang

Implemented PKT_RX_VLAN_STRIPPED for vector PMD on Arm platform.

Test Results:
NICs: 82599(igb)
Dirver: ixgbe(vector)
Packet: vlan-id=1

$:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i --port-topology=chained \
to enable vlan stripping: --enable-hw-vlan-strip
test-pmd> set fwd rxonly
test-pmd> set verbose 1
test-pmd> start

With this patch:
%enable vlan stripping:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1 - VLAN tci=0x1
ol_flags: PKT_RX_VLAN PKT_RX_VLAN_STRIPPED

%disable vlan stripping:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x8100 - length=74 - nb_segs=1 - VLAN tci=0x0
ol_flags: PKT_RX_VLAN

_________________________

Without this patch:
%enable vlan stripping:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1 - VLAN tci=0x1
ol_flags: PKT_RX_VLAN

%disable vlan stripping:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x8100 - length=74 - nb_segs=1 - VLAN tci=0x0
ol_flags: PKT_RX_VLAN

Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 36 ++++++++++++++++---------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
index 4c81ae9dc..e6d877af9 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
@@ -81,11 +81,9 @@ ixgbe_rxq_rearm(struct ixgbe_rx_queue *rxq)
 	IXGBE_PCI_REG_WRITE(rxq->rdt_reg_addr, rx_id);
 }
 
-#define VTAG_SHIFT     (3)
-
 static inline void
 desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
-		  uint8x16_t staterr, struct rte_mbuf **rx_pkts)
+		  uint8x16_t staterr, uint8_t vlan_flags, struct rte_mbuf **rx_pkts)
 {
 	uint8x16_t ptype;
 	uint8x16_t vtag;
@@ -95,13 +93,6 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 		uint32_t word;
 	} vol;
 
-	const uint8x16_t pkttype_msk = {
-			PKT_RX_VLAN, PKT_RX_VLAN,
-			PKT_RX_VLAN, PKT_RX_VLAN,
-			0x00, 0x00, 0x00, 0x00,
-			0x00, 0x00, 0x00, 0x00,
-			0x00, 0x00, 0x00, 0x00};
-
 	const uint8x16_t rsstype_msk = {
 			0x0F, 0x0F, 0x0F, 0x0F,
 			0x00, 0x00, 0x00, 0x00,
@@ -114,12 +105,26 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 			PKT_RX_RSS_HASH, 0, 0, 0,
 			0, 0, 0, PKT_RX_FDIR};
 
+	const uint8x16_t vlan_msk = {
+			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
+			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
+			0, 0, 0, 0,
+			0, 0, 0, 0,
+			0, 0, 0, 0};
+
+	const uint8x16_t vlan_map = {
+			0, 0, 0, 0,
+			0, 0, 0, 0,
+			vlan_flags, 0, 0, 0,
+			0, 0, 0, 0};
+
 	ptype = vzipq_u8(sterr_tmp1.val[0], sterr_tmp2.val[0]).val[0];
 	ptype = vandq_u8(ptype, rsstype_msk);
 	ptype = vqtbl1q_u8(rss_flags, ptype);
 
-	vtag = vshrq_n_u8(staterr, VTAG_SHIFT);
-	vtag = vandq_u8(vtag, pkttype_msk);
+	/* extract vlan_flags from IXGBE_RXD_STAT_VP bits of staterr */
+	vtag = vandq_u8(staterr, vlan_msk);
+	vtag = vqtbl1q_u8(vlan_map, vtag);
 	vtag = vorrq_u8(ptype, vtag);
 
 	vol.word = vgetq_lane_u32(vreinterpretq_u32_u8(vtag), 0);
@@ -221,6 +226,7 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
 		};
 	uint16x8_t crc_adjust = {0, 0, rxq->crc_len, 0,
 				 rxq->crc_len, 0, 0, 0};
+	uint8_t vlan_flags;
 
 	/* nb_pkts has to be floor-aligned to RTE_IXGBE_DESCS_PER_LOOP */
 	nb_pkts = RTE_ALIGN_FLOOR(nb_pkts, RTE_IXGBE_DESCS_PER_LOOP);
@@ -250,6 +256,10 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
 	 */
 	sw_ring = &rxq->sw_ring[rxq->rx_tail];
 
+	/* ensure these 2 flags are in the lower 8 bits */
+	RTE_BUILD_BUG_ON((PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED) > UINT8_MAX);
+	vlan_flags = rxq->vlan_flags & UINT8_MAX;
+
 	/* A. load 4 packet in one loop
 	 * B. copy 4 mbuf point from swring to rx_pkts
 	 * C. calc the number of DD bits among the 4 packets
@@ -311,7 +321,7 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
 		staterr = vzipq_u8(sterr_tmp1.val[1], sterr_tmp2.val[1]).val[0];
 
 		/* set ol_flags with vlan packet type */
-		desc_to_olflags_v(sterr_tmp1, sterr_tmp2, staterr,
+		desc_to_olflags_v(sterr_tmp1, sterr_tmp2, staterr, vlan_flags,
 				  &rx_pkts[pos]);
 
 		/* D.2 pkt 3,4 set in_port/nb_seg and remove crc */
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector
  2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm Feifei Wang
@ 2020-11-18  6:29 ` Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag " Feifei Wang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  6:29 UTC (permalink / raw)
  To: Jerin Jacob, Ruifeng Wang, Jeff Guo, Haiyue Wang; +Cc: dev, nd, Feifei Wang

Updated desc_to_olflags_v() to support PKT_RX_IP_CKSUM_BAD and
PKT_RX_L4_CKSUM_BAD in the ol_flags of the mbuf for Arm neon vector
Rx function.

Test Results:
NICs: 82599(igb)
Dirver: ixgbe(vector)
Packet: IPv4_checksum = 0xee && UDP_checksum = 0xee

$:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i --port-topology=chained
test-pmd> set fwd rxonly
test-pmd> set verbose 1
test-pmd> start

With this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_BAD PKT_RX_IP_CKSUM_BAD

Without this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN

Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 47 +++++++++++++++++++------
 1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
index e6d877af9..4d6f057e7 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
@@ -87,6 +87,8 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 {
 	uint8x16_t ptype;
 	uint8x16_t vtag;
+	uint8x16_t temp_csum;
+	uint32x4_t csum = {0, 0, 0, 0};
 
 	union {
 		uint8_t e[4];
@@ -105,26 +107,51 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 			PKT_RX_RSS_HASH, 0, 0, 0,
 			0, 0, 0, PKT_RX_FDIR};
 
-	const uint8x16_t vlan_msk = {
+	/* mask everything except vlan present and l4/ip csum error */
+	const uint8x16_t vlan_csum_msk = {
 			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
 			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
 			0, 0, 0, 0,
 			0, 0, 0, 0,
-			0, 0, 0, 0};
-
-	const uint8x16_t vlan_map = {
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24};
+
+	/* map vlan present (0x8), IPE (0x2), L4E (0x1) to ol_flags */
+	const uint8x16_t vlan_csum_map = {
+			0,
+			PKT_RX_L4_CKSUM_BAD,
+			PKT_RX_IP_CKSUM_BAD,
+			PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0,
-			0, 0, 0, 0,
-			vlan_flags, 0, 0, 0,
+			vlan_flags,
+			vlan_flags | PKT_RX_L4_CKSUM_BAD,
+			vlan_flags | PKT_RX_IP_CKSUM_BAD,
+			vlan_flags | PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0};
 
 	ptype = vzipq_u8(sterr_tmp1.val[0], sterr_tmp2.val[0]).val[0];
 	ptype = vandq_u8(ptype, rsstype_msk);
 	ptype = vqtbl1q_u8(rss_flags, ptype);
 
-	/* extract vlan_flags from IXGBE_RXD_STAT_VP bits of staterr */
-	vtag = vandq_u8(staterr, vlan_msk);
-	vtag = vqtbl1q_u8(vlan_map, vtag);
+	/* extract vlan_flags and csum_error from staterr */
+	vtag = vandq_u8(staterr, vlan_csum_msk);
+
+	/* csum bits are in the most significant, to use shuffle we need to
+	 * shift them. Change mask from 0xc0 to 0x03.
+	 */
+	temp_csum = vshrq_n_u8(vtag, 6);
+
+	/* 'OR' the most significant 32 bits containing the checksum
+	 * flags with the vlan present flags
+	 * Then bits layout of each lane(8bits) will be 'xxxx,VP,x,IPE,L4E'
+	 */
+	csum = vsetq_lane_u32(vgetq_lane_u32(vreinterpretq_u32_u8(temp_csum), 3), csum, 0);
+	vtag = vorrq_u8(vreinterpretq_u8_u32(csum), vtag);
+
+	/* convert VP, IPE, L4E to ol_flags */
+	vtag = vqtbl1q_u8(vlan_csum_map, vtag);
 	vtag = vorrq_u8(ptype, vtag);
 
 	vol.word = vgetq_lane_u32(vreinterpretq_u32_u8(vtag), 0);
@@ -391,7 +418,6 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
  * Notice:
  * - nb_pkts < RTE_IXGBE_DESCS_PER_LOOP, just return no packet
  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two
- * - don't support ol_flags for rss and csum err
  */
 uint16_t
 ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
@@ -404,7 +430,6 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
  * vPMD receive routine that reassembles scattered packets
  *
  * Notice:
- * - don't support ol_flags for rss and csum err
  * - nb_pkts < RTE_IXGBE_DESCS_PER_LOOP, just return no packet
  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two
  */
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
  2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm Feifei Wang
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector Feifei Wang
@ 2020-11-18  6:29 ` Feifei Wang
  2020-11-18  7:21   ` Wang, Haiyue
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 4/4] net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set Feifei Wang
  2020-12-11  1:52 ` [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Zhang, Qi Z
  4 siblings, 1 reply; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  6:29 UTC (permalink / raw)
  To: Jerin Jacob, Ruifeng Wang, Jeff Guo, Haiyue Wang; +Cc: dev, nd, feiwan02

From: feiwan02 <feifei.wang2@arm.com>

Add CKSUM_GOOD flag to distinguish a good checksum from an unknown one
in neon vertor RX function.

Test Results:
NICs: 82599(igb)
Dirver: ixgbe(vector)
Packet: IPv4_checksum = correct value && UDP_checksum = correct value

$:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i --port-topology=chained
test-pmd> set fwd rxonly
test-pmd> set verbose 1
test-pmd> start

With this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD

Without this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN

Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 37 +++++++++++++++++--------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
index 4d6f057e7..b2bee2228 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
@@ -86,13 +86,13 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 		  uint8x16_t staterr, uint8_t vlan_flags, struct rte_mbuf **rx_pkts)
 {
 	uint8x16_t ptype;
-	uint8x16_t vtag;
+	uint8x16_t vtag_lo, vtag_hi, vtag;
 	uint8x16_t temp_csum;
 	uint32x4_t csum = {0, 0, 0, 0};
 
 	union {
-		uint8_t e[4];
-		uint32_t word;
+		uint16_t e[4];
+		uint64_t word;
 	} vol;
 
 	const uint8x16_t rsstype_msk = {
@@ -119,18 +119,26 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24};
 
 	/* map vlan present (0x8), IPE (0x2), L4E (0x1) to ol_flags */
-	const uint8x16_t vlan_csum_map = {
-			0,
-			PKT_RX_L4_CKSUM_BAD,
+	const uint8x16_t vlan_csum_map_lo = {
+			PKT_RX_IP_CKSUM_GOOD,
+			PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD,
 			PKT_RX_IP_CKSUM_BAD,
 			PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0,
-			vlan_flags,
-			vlan_flags | PKT_RX_L4_CKSUM_BAD,
+			vlan_flags | PKT_RX_IP_CKSUM_GOOD,
+			vlan_flags | PKT_RX_IP_CKSUM_GOOD | PKT_RX_L4_CKSUM_BAD,
 			vlan_flags | PKT_RX_IP_CKSUM_BAD,
 			vlan_flags | PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0};
 
+	const uint8x16_t vlan_csum_map_hi = {
+			PKT_RX_L4_CKSUM_GOOD >> sizeof(uint8_t), 0,
+			PKT_RX_L4_CKSUM_GOOD >> sizeof(uint8_t), 0,
+			0, 0, 0, 0,
+			PKT_RX_L4_CKSUM_GOOD >> sizeof(uint8_t), 0,
+			PKT_RX_L4_CKSUM_GOOD >> sizeof(uint8_t), 0,
+			0, 0, 0, 0};
+
 	ptype = vzipq_u8(sterr_tmp1.val[0], sterr_tmp2.val[0]).val[0];
 	ptype = vandq_u8(ptype, rsstype_msk);
 	ptype = vqtbl1q_u8(rss_flags, ptype);
@@ -150,11 +158,16 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 	csum = vsetq_lane_u32(vgetq_lane_u32(vreinterpretq_u32_u8(temp_csum), 3), csum, 0);
 	vtag = vorrq_u8(vreinterpretq_u8_u32(csum), vtag);
 
-	/* convert VP, IPE, L4E to ol_flags */
-	vtag = vqtbl1q_u8(vlan_csum_map, vtag);
-	vtag = vorrq_u8(ptype, vtag);
+	/* convert L4 checksum correct type to vtag_hi */
+	vtag_hi = vqtbl1q_u8(vlan_csum_map_hi, vtag);
+	vtag_hi = vshrq_n_u8(vtag_hi, 7);
+
+	/* convert VP, IPE, L4E to vtag_lo */
+	vtag_lo = vqtbl1q_u8(vlan_csum_map_lo, vtag);
+	vtag_lo = vorrq_u8(ptype, vtag_lo);
 
-	vol.word = vgetq_lane_u32(vreinterpretq_u32_u8(vtag), 0);
+	vtag = vzipq_u8(vtag_lo, vtag_hi).val[0];
+	vol.word = vgetq_lane_u64(vreinterpretq_u64_u8(vtag), 0);
 
 	rx_pkts[0]->ol_flags = vol.e[0];
 	rx_pkts[1]->ol_flags = vol.e[1];
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] [PATCH v1 4/4] net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set
  2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
                   ` (2 preceding siblings ...)
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag " Feifei Wang
@ 2020-11-18  6:29 ` Feifei Wang
  2020-12-11  1:52 ` [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Zhang, Qi Z
  4 siblings, 0 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  6:29 UTC (permalink / raw)
  To: Jerin Jacob, Ruifeng Wang, Jeff Guo, Haiyue Wang; +Cc: dev, nd, feiwan02

From: feiwan02 <feifei.wang2@arm.com>

IXGBE NEON vector PMD now supports checksum offloading, hence can be used
when DEV_RX_OFFLOAD_CHECKSUM is set.

Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
index b2bee2228..a5a5b2167 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
@@ -638,11 +638,5 @@ ixgbe_txq_vec_setup(struct ixgbe_tx_queue *txq)
 int __rte_cold
 ixgbe_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev)
 {
-	struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
-
-	/* no csum error report support */
-	if (rxmode->offloads & DEV_RX_OFFLOAD_CHECKSUM)
-		return -1;
-
 	return ixgbe_rx_vec_dev_conf_condition_check_default(dev);
 }
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag " Feifei Wang
@ 2020-11-18  7:21   ` Wang, Haiyue
  2020-11-18  7:55     ` [dpdk-dev] 回复: " Feifei Wang
  0 siblings, 1 reply; 11+ messages in thread
From: Wang, Haiyue @ 2020-11-18  7:21 UTC (permalink / raw)
  To: Feifei Wang, Jerin Jacob, Ruifeng Wang, Guo, Jia; +Cc: dev, nd

> -----Original Message-----
> From: Feifei Wang <feifei.wang2@arm.com>
> Sent: Wednesday, November 18, 2020 14:29
> To: Jerin Jacob <jerinj@marvell.com>; Ruifeng Wang <ruifeng.wang@arm.com>; Guo, Jia
> <jia.guo@intel.com>; Wang, Haiyue <haiyue.wang@intel.com>
> Cc: dev@dpdk.org; nd@arm.com; feiwan02 <feifei.wang2@arm.com>
> Subject: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
> 
> From: feiwan02 <feifei.wang2@arm.com>
> 
> Add CKSUM_GOOD flag to distinguish a good checksum from an unknown one
> in neon vertor RX function.
> 
> Test Results:
> NICs: 82599(igb)
> Dirver: ixgbe(vector)
> Packet: IPv4_checksum = correct value && UDP_checksum = correct value
> 
> $:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i --port-topology=chained
> test-pmd> set fwd rxonly
> test-pmd> set verbose 1
> test-pmd> start
> 
> With this patch:
> testpmd> port 0/queue 0: received 1 packets
> src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
> ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD
> 
> Without this patch:
> testpmd> port 0/queue 0: received 1 packets
> src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
> ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN
> 

How about to merge "1 & 2" and "3 & 4"? Then you will have the above test result. ;-)

> Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
> Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> ---
> 2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] 回复: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
  2020-11-18  7:21   ` Wang, Haiyue
@ 2020-11-18  7:55     ` Feifei Wang
  2020-11-18  8:15       ` [dpdk-dev] " Wang, Haiyue
  0 siblings, 1 reply; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  7:55 UTC (permalink / raw)
  To: Wang, Haiyue, jerinj, Ruifeng Wang, Guo, Jia; +Cc: dev, nd, nd

Hi, Haiyue

> -----邮件原件-----
> 发件人: Wang, Haiyue <haiyue.wang@intel.com>
> 发送时间: 2020年11月18日 15:22
> 收件人: Feifei Wang <Feifei.Wang2@arm.com>; jerinj@marvell.com; Ruifeng
> Wang <Ruifeng.Wang@arm.com>; Guo, Jia <jia.guo@intel.com>
> 抄送: dev@dpdk.org; nd <nd@arm.com>
> 主题: RE: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON
> vector
> 
> > -----Original Message-----
> > From: Feifei Wang <feifei.wang2@arm.com>
> > Sent: Wednesday, November 18, 2020 14:29
> > To: Jerin Jacob <jerinj@marvell.com>; Ruifeng Wang
> > <ruifeng.wang@arm.com>; Guo, Jia <jia.guo@intel.com>; Wang, Haiyue
> > <haiyue.wang@intel.com>
> > Cc: dev@dpdk.org; nd@arm.com; feiwan02 <feifei.wang2@arm.com>
> > Subject: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for
> > NEON vector
> >
> > From: feiwan02 <feifei.wang2@arm.com>
> >
> > Add CKSUM_GOOD flag to distinguish a good checksum from an unknown
> one
> > in neon vertor RX function.
> >
> > Test Results:
> > NICs: 82599(igb)
> > Dirver: ixgbe(vector)
> > Packet: IPv4_checksum = correct value && UDP_checksum = correct value
> >
> > $:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i
> > --port-topology=chained
> > test-pmd> set fwd rxonly
> > test-pmd> set verbose 1
> > test-pmd> start
> >
> > With this patch:
> > testpmd> port 0/queue 0: received 1 packets
> > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > length=70 - nb_segs=1
> > ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD
> >
> > Without this patch:
> > testpmd> port 0/queue 0: received 1 packets
> > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > length=70 - nb_segs=1
> > ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN
> >
> 
> How about to merge "1 & 2" and "3 & 4"? Then you will have the above test
> result. ;-)
Do you mean that combine patch 1 and patch 2 into one patch to support vlan stripping and bad checksum flag, 
Then also do the same work for patch 3 and patch 4 to support good checksum flag and enable IXGBE neon vector when DEV_RX_OFFLOAD_CHECKSUM is set?

Actually, the test results are achieved without patch 4, due to that testpmd does not check rxmode->offloads, it will call IXGBE NEON vector function directly. And this change
is for the default config of l3fwd example.

Best Regards
Feifei
> 
> > Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
> > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> > ---
> > 2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
  2020-11-18  7:55     ` [dpdk-dev] 回复: " Feifei Wang
@ 2020-11-18  8:15       ` Wang, Haiyue
  2020-11-18  8:29         ` [dpdk-dev] 回复: " Feifei Wang
  0 siblings, 1 reply; 11+ messages in thread
From: Wang, Haiyue @ 2020-11-18  8:15 UTC (permalink / raw)
  To: Feifei Wang, jerinj, Ruifeng Wang, Guo, Jia; +Cc: dev, nd, nd

> -----Original Message-----
> From: Feifei Wang <Feifei.Wang2@arm.com>
> Sent: Wednesday, November 18, 2020 15:56
> To: Wang, Haiyue <haiyue.wang@intel.com>; jerinj@marvell.com; Ruifeng Wang <Ruifeng.Wang@arm.com>; Guo,
> Jia <jia.guo@intel.com>
> Cc: dev@dpdk.org; nd <nd@arm.com>; nd <nd@arm.com>
> Subject: 回复: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
> 
> Hi, Haiyue
> 
> > -----邮件原件-----
> > 发件人: Wang, Haiyue <haiyue.wang@intel.com>
> > 发送时间: 2020年11月18日 15:22
> > 收件人: Feifei Wang <Feifei.Wang2@arm.com>; jerinj@marvell.com; Ruifeng
> > Wang <Ruifeng.Wang@arm.com>; Guo, Jia <jia.guo@intel.com>
> > 抄送: dev@dpdk.org; nd <nd@arm.com>
> > 主题: RE: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON
> > vector
> >
> > > -----Original Message-----
> > > From: Feifei Wang <feifei.wang2@arm.com>
> > > Sent: Wednesday, November 18, 2020 14:29
> > > To: Jerin Jacob <jerinj@marvell.com>; Ruifeng Wang
> > > <ruifeng.wang@arm.com>; Guo, Jia <jia.guo@intel.com>; Wang, Haiyue
> > > <haiyue.wang@intel.com>
> > > Cc: dev@dpdk.org; nd@arm.com; feiwan02 <feifei.wang2@arm.com>
> > > Subject: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for
> > > NEON vector
> > >
> > > From: feiwan02 <feifei.wang2@arm.com>
> > >
> > > Add CKSUM_GOOD flag to distinguish a good checksum from an unknown
> > one
> > > in neon vertor RX function.
> > >
> > > Test Results:
> > > NICs: 82599(igb)
> > > Dirver: ixgbe(vector)
> > > Packet: IPv4_checksum = correct value && UDP_checksum = correct value
> > >
> > > $:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i
> > > --port-topology=chained
> > > test-pmd> set fwd rxonly
> > > test-pmd> set verbose 1
> > > test-pmd> start
> > >
> > > With this patch:
> > > testpmd> port 0/queue 0: received 1 packets
> > > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > > length=70 - nb_segs=1
> > > ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD
> > >
> > > Without this patch:
> > > testpmd> port 0/queue 0: received 1 packets
> > > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > > length=70 - nb_segs=1
> > > ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN
> > >
> >
> > How about to merge "1 & 2" and "3 & 4"? Then you will have the above test
> > result. ;-)
> Do you mean that combine patch 1 and patch 2 into one patch to support vlan stripping and bad checksum
> flag,
> Then also do the same work for patch 3 and patch 4 to support good checksum flag and enable IXGBE neon
> vector when DEV_RX_OFFLOAD_CHECKSUM is set?
> 
> Actually, the test results are achieved without patch 4, due to that testpmd does not check rxmode-
> >offloads, it will call IXGBE NEON vector function directly. And this change
> is for the default config of l3fwd example.
> 

I was messed by the vector code, sorry. Patch b is for bad checksum,
update the commit message to align your design. Then the patch set
is OF for me, thanks!

Feifei Wang (4):
  a). net/ixgbe: add VLAN stripping support for Arm
  b). net/ixgbe: support checksum flags for NEON vector
  c). net/ixgbe: implement good checksum flag for NEON vector
  d). net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set

> Best Regards
> Feifei
> >
> > > Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
> > > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> > > ---
> > > 2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] 回复: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON vector
  2020-11-18  8:15       ` [dpdk-dev] " Wang, Haiyue
@ 2020-11-18  8:29         ` Feifei Wang
  0 siblings, 0 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  8:29 UTC (permalink / raw)
  To: Wang, Haiyue, jerinj, Ruifeng Wang, Guo, Jia; +Cc: dev, nd, nd, nd



> -----邮件原件-----
> 发件人: Wang, Haiyue <haiyue.wang@intel.com>
> 发送时间: 2020年11月18日 16:15
> 收件人: Feifei Wang <Feifei.Wang2@arm.com>; jerinj@marvell.com; Ruifeng
> Wang <Ruifeng.Wang@arm.com>; Guo, Jia <jia.guo@intel.com>
> 抄送: dev@dpdk.org; nd <nd@arm.com>; nd <nd@arm.com>
> 主题: RE: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for NEON
> vector
> 
> > -----Original Message-----
> > From: Feifei Wang <Feifei.Wang2@arm.com>
> > Sent: Wednesday, November 18, 2020 15:56
> > To: Wang, Haiyue <haiyue.wang@intel.com>; jerinj@marvell.com; Ruifeng
> > Wang <Ruifeng.Wang@arm.com>; Guo, Jia <jia.guo@intel.com>
> > Cc: dev@dpdk.org; nd <nd@arm.com>; nd <nd@arm.com>
> > Subject: 回复: [PATCH v1 3/4] net/ixgbe: implement good checksum flag
> > for NEON vector
> >
> > Hi, Haiyue
> >
> > > -----邮件原件-----
> > > 发件人: Wang, Haiyue <haiyue.wang@intel.com>
> > > 发送时间: 2020年11月18日 15:22
> > > 收件人: Feifei Wang <Feifei.Wang2@arm.com>; jerinj@marvell.com;
> Ruifeng
> > > Wang <Ruifeng.Wang@arm.com>; Guo, Jia <jia.guo@intel.com>
> > > 抄送: dev@dpdk.org; nd <nd@arm.com>
> > > 主题: RE: [PATCH v1 3/4] net/ixgbe: implement good checksum flag for
> > > NEON vector
> > >
> > > > -----Original Message-----
> > > > From: Feifei Wang <feifei.wang2@arm.com>
> > > > Sent: Wednesday, November 18, 2020 14:29
> > > > To: Jerin Jacob <jerinj@marvell.com>; Ruifeng Wang
> > > > <ruifeng.wang@arm.com>; Guo, Jia <jia.guo@intel.com>; Wang, Haiyue
> > > > <haiyue.wang@intel.com>
> > > > Cc: dev@dpdk.org; nd@arm.com; feiwan02 <feifei.wang2@arm.com>
> > > > Subject: [PATCH v1 3/4] net/ixgbe: implement good checksum flag
> > > > for NEON vector
> > > >
> > > > From: feiwan02 <feifei.wang2@arm.com>
> > > >
> > > > Add CKSUM_GOOD flag to distinguish a good checksum from an unknown
> > > one
> > > > in neon vertor RX function.
> > > >
> > > > Test Results:
> > > > NICs: 82599(igb)
> > > > Dirver: ixgbe(vector)
> > > > Packet: IPv4_checksum = correct value && UDP_checksum = correct
> > > > value
> > > >
> > > > $:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i
> > > > --port-topology=chained
> > > > test-pmd> set fwd rxonly
> > > > test-pmd> set verbose 1
> > > > test-pmd> start
> > > >
> > > > With this patch:
> > > > testpmd> port 0/queue 0: received 1 packets
> > > > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > > > length=70 - nb_segs=1
> > > > ol_flags: PKT_RX_L4_CKSUM_GOOD PKT_RX_IP_CKSUM_GOOD
> > > >
> > > > Without this patch:
> > > > testpmd> port 0/queue 0: received 1 packets
> > > > src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 -
> > > > length=70 - nb_segs=1
> > > > ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN
> > > >
> > >
> > > How about to merge "1 & 2" and "3 & 4"? Then you will have the above
> > > test result. ;-)
> > Do you mean that combine patch 1 and patch 2 into one patch to support
> > vlan stripping and bad checksum flag, Then also do the same work for
> > patch 3 and patch 4 to support good checksum flag and enable IXGBE
> > neon vector when DEV_RX_OFFLOAD_CHECKSUM is set?
> >
> > Actually, the test results are achieved without patch 4, due to that
> > testpmd does not check rxmode-
> > >offloads, it will call IXGBE NEON vector function directly. And this
> > >change
> > is for the default config of l3fwd example.
> >
> 
> I was messed by the vector code, sorry. Patch b is for bad checksum, update the
> commit message to align your design. Then the patch set is OF for me, thanks!
> 
> Feifei Wang (4):
>   a). net/ixgbe: add VLAN stripping support for Arm
>   b). net/ixgbe: support checksum flags for NEON vector
>   c). net/ixgbe: implement good checksum flag for NEON vector
>   d). net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set
> 
That's all right. I will update the commit message and then upload the new version.
Thanks for your attention.
> > Best Regards
> > Feifei
> > >
> > > > Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
> > > > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
> > > > ---
> > > > 2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector
  2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
                   ` (3 preceding siblings ...)
  2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 4/4] net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set Feifei Wang
@ 2020-12-11  1:52 ` Zhang, Qi Z
  4 siblings, 0 replies; 11+ messages in thread
From: Zhang, Qi Z @ 2020-12-11  1:52 UTC (permalink / raw)
  To: Feifei Wang; +Cc: dev, nd



> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Feifei Wang
> Sent: Wednesday, November 18, 2020 2:29 PM
> Cc: dev@dpdk.org; nd@arm.com; Feifei Wang <feifei.wang2@arm.com>
> Subject: [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON
> vector
> 
> This patch series are mainly to enable checksum offloading for IXGBE NEON
> vector PMD, including good and bad checksum flags. In the meanwhile, the first
> patch enable VLAN stripping flag for Arm.
> 
> Feifei Wang (4):
>   net/ixgbe: add VLAN stripping support for Arm
>   net/ixgbe: support checksum flags for NEON vector
>   net/ixgbe: implement good checksum flag for NEON vector
>   net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set
> 
>  drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 94 ++++++++++++++++++-------
>  1 file changed, 68 insertions(+), 26 deletions(-)
> 
> --
> 2.17.1


Applied to dpdk-next-net-intel.

Thanks
Qi

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector
  2020-11-18  7:35 Feifei Wang
@ 2020-11-18  7:35 ` Feifei Wang
  0 siblings, 0 replies; 11+ messages in thread
From: Feifei Wang @ 2020-11-18  7:35 UTC (permalink / raw)
  To: Jerin Jacob, Ruifeng Wang, Jeff Guo, Haiyue Wang; +Cc: dev, nd, Feifei Wang

Updated desc_to_olflags_v() to support PKT_RX_IP_CKSUM_BAD and
PKT_RX_L4_CKSUM_BAD in the ol_flags of the mbuf for Arm neon vector
Rx function.

Test Results:
NICs: 82599(igb)
Driver: ixgbe(vector)
Packet: IPv4_checksum = 0xee && UDP_checksum = 0xee

$:./app/dpdk-testpmd -c 0x3 -w 0002:f9:00.0 -- -i --port-topology=chained
test-pmd> set fwd rxonly
test-pmd> set verbose 1
test-pmd> start

With this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_BAD PKT_RX_IP_CKSUM_BAD

Without this patch:
testpmd> port 0/queue 0: received 1 packets
src=00:00:00:00:00:02 - dst=00:00:00:00:00:01 - type=0x0800 - length=70 - nb_segs=1
ol_flags: PKT_RX_L4_CKSUM_UNKNOWN PKT_RX_IP_CKSUM_UNKNOWN

Signed-off-by: Feifei Wang <feifei.wang2@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 47 +++++++++++++++++++------
 1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
index e6d877af9..4d6f057e7 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c
@@ -87,6 +87,8 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 {
 	uint8x16_t ptype;
 	uint8x16_t vtag;
+	uint8x16_t temp_csum;
+	uint32x4_t csum = {0, 0, 0, 0};
 
 	union {
 		uint8_t e[4];
@@ -105,26 +107,51 @@ desc_to_olflags_v(uint8x16x2_t sterr_tmp1, uint8x16x2_t sterr_tmp2,
 			PKT_RX_RSS_HASH, 0, 0, 0,
 			0, 0, 0, PKT_RX_FDIR};
 
-	const uint8x16_t vlan_msk = {
+	/* mask everything except vlan present and l4/ip csum error */
+	const uint8x16_t vlan_csum_msk = {
 			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
 			IXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,
 			0, 0, 0, 0,
 			0, 0, 0, 0,
-			0, 0, 0, 0};
-
-	const uint8x16_t vlan_map = {
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24,
+			(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 24};
+
+	/* map vlan present (0x8), IPE (0x2), L4E (0x1) to ol_flags */
+	const uint8x16_t vlan_csum_map = {
+			0,
+			PKT_RX_L4_CKSUM_BAD,
+			PKT_RX_IP_CKSUM_BAD,
+			PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0,
-			0, 0, 0, 0,
-			vlan_flags, 0, 0, 0,
+			vlan_flags,
+			vlan_flags | PKT_RX_L4_CKSUM_BAD,
+			vlan_flags | PKT_RX_IP_CKSUM_BAD,
+			vlan_flags | PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,
 			0, 0, 0, 0};
 
 	ptype = vzipq_u8(sterr_tmp1.val[0], sterr_tmp2.val[0]).val[0];
 	ptype = vandq_u8(ptype, rsstype_msk);
 	ptype = vqtbl1q_u8(rss_flags, ptype);
 
-	/* extract vlan_flags from IXGBE_RXD_STAT_VP bits of staterr */
-	vtag = vandq_u8(staterr, vlan_msk);
-	vtag = vqtbl1q_u8(vlan_map, vtag);
+	/* extract vlan_flags and csum_error from staterr */
+	vtag = vandq_u8(staterr, vlan_csum_msk);
+
+	/* csum bits are in the most significant, to use shuffle we need to
+	 * shift them. Change mask from 0xc0 to 0x03.
+	 */
+	temp_csum = vshrq_n_u8(vtag, 6);
+
+	/* 'OR' the most significant 32 bits containing the checksum
+	 * flags with the vlan present flags
+	 * Then bits layout of each lane(8bits) will be 'xxxx,VP,x,IPE,L4E'
+	 */
+	csum = vsetq_lane_u32(vgetq_lane_u32(vreinterpretq_u32_u8(temp_csum), 3), csum, 0);
+	vtag = vorrq_u8(vreinterpretq_u8_u32(csum), vtag);
+
+	/* convert VP, IPE, L4E to ol_flags */
+	vtag = vqtbl1q_u8(vlan_csum_map, vtag);
 	vtag = vorrq_u8(ptype, vtag);
 
 	vol.word = vgetq_lane_u32(vreinterpretq_u32_u8(vtag), 0);
@@ -391,7 +418,6 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,
  * Notice:
  * - nb_pkts < RTE_IXGBE_DESCS_PER_LOOP, just return no packet
  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two
- * - don't support ol_flags for rss and csum err
  */
 uint16_t
 ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
@@ -404,7 +430,6 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
  * vPMD receive routine that reassembles scattered packets
  *
  * Notice:
- * - don't support ol_flags for rss and csum err
  * - nb_pkts < RTE_IXGBE_DESCS_PER_LOOP, just return no packet
  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two
  */
-- 
2.17.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-12-11  1:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-18  6:29 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm Feifei Wang
2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector Feifei Wang
2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag " Feifei Wang
2020-11-18  7:21   ` Wang, Haiyue
2020-11-18  7:55     ` [dpdk-dev] 回复: " Feifei Wang
2020-11-18  8:15       ` [dpdk-dev] " Wang, Haiyue
2020-11-18  8:29         ` [dpdk-dev] 回复: " Feifei Wang
2020-11-18  6:29 ` [dpdk-dev] [PATCH v1 4/4] net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set Feifei Wang
2020-12-11  1:52 ` [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading for NEON vector Zhang, Qi Z
2020-11-18  7:35 Feifei Wang
2020-11-18  7:35 ` [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags " Feifei Wang

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git