From: Feifei Wang <feifei.wang2@arm.com>
To: Jerin Jacob <jerinj@marvell.com>,
Ruifeng Wang <ruifeng.wang@arm.com>, Jeff Guo <jia.guo@intel.com>,
Haiyue Wang <haiyue.wang@intel.com>
Cc: dev@dpdk.org, nd@arm.com, Feifei Wang <feifei.wang2@arm.com>
Subject: [dpdk-dev] [PATCH v2 2/4] net/ixgbe: support bad checksum flag for NEON vector
Date: Wed, 18 Nov 2020 04:48:57 -0600 [thread overview]
Message-ID: <20201118104859.29047-3-feifei.wang2@arm.com> (raw)
In-Reply-To: <20201118104859.29047-1-feifei.wang2@arm.com>
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.
And then the NEON vector RX function can be called with hw_ip_checksum
enabled.
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
next prev parent reply other threads:[~2020-11-18 10:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-18 7:35 [dpdk-dev] [PATCH v1 0/4] Enable Checksum Offloading " Feifei Wang
2020-11-18 7:35 ` [dpdk-dev] [PATCH v1 1/4] net/ixgbe: add VLAN stripping support for Arm Feifei Wang
2020-11-18 8:34 ` Wang, Haiyue
2020-11-18 10:51 ` [dpdk-dev] 回复: " Feifei Wang
2020-11-18 7:35 ` [dpdk-dev] [PATCH v1 2/4] net/ixgbe: support checksum flags for NEON vector Feifei Wang
2020-11-18 7:35 ` [dpdk-dev] [PATCH v1 3/4] net/ixgbe: implement good checksum flag " Feifei Wang
2020-11-18 7:35 ` [dpdk-dev] [PATCH v1 4/4] net/ixgbe: enable IXGBE NEON vector PMD when CHECKSUM is set Feifei Wang
2020-11-18 10:48 ` [dpdk-dev] [PATCH v2 0/4] Enable Checksum Offloading for NEON vector Feifei Wang
2020-11-18 10:48 ` [dpdk-dev] [PATCH v2 1/4] net/ixgbe: add new flag of stripped VLAN " Feifei Wang
2020-11-18 11:51 ` Wang, Haiyue
2020-11-18 10:48 ` Feifei Wang [this message]
2020-11-18 11:51 ` [dpdk-dev] [PATCH v2 2/4] net/ixgbe: support bad checksum flag " Wang, Haiyue
2020-11-18 10:48 ` [dpdk-dev] [PATCH v2 3/4] net/ixgbe: support good " Feifei Wang
2020-11-18 11:51 ` Wang, Haiyue
2020-11-18 10:48 ` [dpdk-dev] [PATCH v2 4/4] net/ixgbe: enable IXGBE NEON vector when need to checksum Feifei Wang
2020-11-18 11:51 ` Wang, Haiyue
2020-12-11 12:06 ` [dpdk-dev] [PATCH v2 0/4] Enable Checksum Offloading for NEON vector Ferruh Yigit
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=20201118104859.29047-3-feifei.wang2@arm.com \
--to=feifei.wang2@arm.com \
--cc=dev@dpdk.org \
--cc=haiyue.wang@intel.com \
--cc=jerinj@marvell.com \
--cc=jia.guo@intel.com \
--cc=nd@arm.com \
--cc=ruifeng.wang@arm.com \
/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).