[dpdk-dev,v3] i40e: fix olflags for vector Rx

Message ID 1465881856-8248-1-git-send-email-zhe.tao@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Zhe Tao June 14, 2016, 5:24 a.m. UTC
  Problem:
The flag for RSS and flow director is not set correctly in the
vector Rx function, so the upper layer APP which base on the related
flags will not work correctly.

Fix this problem by change the shuffle table. the original shuffle
table is not correct.

Fixes: 9ed94e5bb04e ("i40e: add vector Rx")

Signed-off-by: Zhe Tao <zhe.tao@intel.com>
---
v2: Changed the comments according to the code change.
v3: Fixed the issues reported by check-git-log.sh.

 drivers/net/i40e/i40e_rxtx_vec.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
  

Comments

Piotr Azarewicz June 14, 2016, 8:43 a.m. UTC | #1
> Problem:
> The flag for RSS and flow director is not set correctly in the vector Rx
> function, so the upper layer APP which base on the related flags will not work
> correctly.
> 
> Fix this problem by change the shuffle table. the original shuffle table is not
> correct.
> 
> Fixes: 9ed94e5bb04e ("i40e: add vector Rx")
> 
> Signed-off-by: Zhe Tao <zhe.tao@intel.com>

Reviewed-by: Piotr Azarewicz <piotrx.t.azarewicz@intel.com>
  
Jingjing Wu June 15, 2016, 8:35 a.m. UTC | #2
> -----Original Message-----
> From: Tao, Zhe
> Sent: Tuesday, June 14, 2016 1:24 PM
> To: dev@dpdk.org
> Cc: Tao, Zhe <zhe.tao@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>
> Subject: [PATCH v3] i40e: fix olflags for vector Rx
> 
> Problem:
> The flag for RSS and flow director is not set correctly in the
> vector Rx function, so the upper layer APP which base on the related
> flags will not work correctly.
> 
> Fix this problem by change the shuffle table. the original shuffle
> table is not correct.
> 
> Fixes: 9ed94e5bb04e ("i40e: add vector Rx")
> 
> Signed-off-by: Zhe Tao <zhe.tao@intel.com>

Acked-by: Jingjing Wu <jingjing.wu@intel.com>
  
Bruce Richardson June 23, 2016, 11:07 a.m. UTC | #3
On Wed, Jun 15, 2016 at 08:35:30AM +0000, Wu, Jingjing wrote:
> 
> 
> > -----Original Message-----
> > From: Tao, Zhe
> > Sent: Tuesday, June 14, 2016 1:24 PM
> > To: dev@dpdk.org
> > Cc: Tao, Zhe <zhe.tao@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>
> > Subject: [PATCH v3] i40e: fix olflags for vector Rx
> > 
> > Problem:
> > The flag for RSS and flow director is not set correctly in the
> > vector Rx function, so the upper layer APP which base on the related
> > flags will not work correctly.
> > 
> > Fix this problem by change the shuffle table. the original shuffle
> > table is not correct.
> > 
> > Fixes: 9ed94e5bb04e ("i40e: add vector Rx")
> > 
> > Signed-off-by: Zhe Tao <zhe.tao@intel.com>
> 
> Acked-by: Jingjing Wu <jingjing.wu@intel.com>
>
Applied to dpdk-next-net/rel_16_07

/Bruce
  

Patch

diff --git a/drivers/net/i40e/i40e_rxtx_vec.c b/drivers/net/i40e/i40e_rxtx_vec.c
index eef80d9..704924f 100644
--- a/drivers/net/i40e/i40e_rxtx_vec.c
+++ b/drivers/net/i40e/i40e_rxtx_vec.c
@@ -144,12 +144,13 @@  desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts)
 		uint64_t dword;
 	} vol;
 
-	/* mask everything except rss and vlan flags
-	*bit2 is for vlan tag, bits 13:12 for rss
-	*/
+	/* mask everything except RSS, flow director and VLAN flags
+	 * bit2 is for VLAN tag, bit11 for flow director indication
+	 * bit13:12 for RSS indication.
+	 */
 	const __m128i rss_vlan_msk = _mm_set_epi16(
 			0x0000, 0x0000, 0x0000, 0x0000,
-			0x3004, 0x3004, 0x3004, 0x3004);
+			0x3804, 0x3804, 0x3804, 0x3804);
 
 	/* map rss and vlan type to rss hash and vlan flag */
 	const __m128i vlan_flags = _mm_set_epi8(0, 0, 0, 0,
@@ -159,8 +160,8 @@  desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts)
 
 	const __m128i rss_flags = _mm_set_epi8(0, 0, 0, 0,
 			0, 0, 0, 0,
-			0, 0, 0, 0,
-			PKT_RX_FDIR, 0, PKT_RX_RSS_HASH, 0);
+			PKT_RX_RSS_HASH | PKT_RX_FDIR, PKT_RX_RSS_HASH, 0, 0,
+			0, 0, PKT_RX_FDIR, 0);
 
 	vlan0 = _mm_unpackhi_epi16(descs[0], descs[1]);
 	vlan1 = _mm_unpackhi_epi16(descs[2], descs[3]);
@@ -169,7 +170,7 @@  desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts)
 	vlan1 = _mm_and_si128(vlan0, rss_vlan_msk);
 	vlan0 = _mm_shuffle_epi8(vlan_flags, vlan1);
 
-	rss = _mm_srli_epi16(vlan1, 12);
+	rss = _mm_srli_epi16(vlan1, 11);
 	rss = _mm_shuffle_epi8(rss_flags, rss);
 
 	vlan0 = _mm_or_si128(vlan0, rss);