From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <bruce.richardson@intel.com>
Received: from mga11.intel.com (mga11.intel.com [192.55.52.93])
 by dpdk.org (Postfix) with ESMTP id 0EC065A9A
 for <dev@dpdk.org>; Fri, 30 Jan 2015 00:30:33 +0100 (CET)
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by fmsmga102.fm.intel.com with ESMTP; 29 Jan 2015 15:30:31 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.09,489,1418112000"; d="scan'208";a="669978546"
Received: from unknown ([10.232.198.31])
 by fmsmga002.fm.intel.com with SMTP; 29 Jan 2015 15:30:29 -0800
Received: by  (sSMTP sendmail emulation); Thu, 29 Jan 2015 16:30:28 -0600
Date: Thu, 29 Jan 2015 16:30:28 -0700
From: Bruce Richardson <bruce.richardson@intel.com>
To: Helin Zhang <helin.zhang@intel.com>
Message-ID: <20150129233027.GB11276@bricha3-MOBL3>
References: <1421637666-16872-1-git-send-email-helin.zhang@intel.com>
 <1422501365-12643-1-git-send-email-helin.zhang@intel.com>
 <1422501365-12643-5-git-send-email-helin.zhang@intel.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
In-Reply-To: <1422501365-12643-5-git-send-email-helin.zhang@intel.com>
Organization: Intel Shannon Ltd.
User-Agent: Mutt/1.5.23 (2014-03-12)
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 04/17] ixgbe: support of unified packet type
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 29 Jan 2015 23:30:34 -0000

On Thu, Jan 29, 2015 at 11:15:52AM +0800, Helin Zhang wrote:
> To unify packet types among all PMDs, bit masks of packet type for
> ol_flags are replaced by unified packet type for Vector PMD.
> 

Two suggestions on the commit log:
1. Can you add scalar and vector into the titles to make it clear how this
patch and the previous ones differ
2. Can you add a note calling out performance impacts for this patch. If no
performance impacts, then please note that for reviewers.

/Bruce

> Signed-off-by: Cunming Liang <cunming.liang@intel.com>
> Signed-off-by: Helin Zhang <helin.zhang@intel.com>
> ---
>  lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c | 39 +++++++++++++++++++----------------
>  1 file changed, 21 insertions(+), 18 deletions(-)
> 
> diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c b/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c
> index b54cb19..b3cf7dd 100644
> --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c
> +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c
> @@ -134,44 +134,35 @@ ixgbe_rxq_rearm(struct igb_rx_queue *rxq)
>   */
>  #ifdef RTE_IXGBE_RX_OLFLAGS_ENABLE
>  
> -#define OLFLAGS_MASK     ((uint16_t)(PKT_RX_VLAN_PKT | PKT_RX_IPV4_HDR |\
> -				     PKT_RX_IPV4_HDR_EXT | PKT_RX_IPV6_HDR |\
> -				     PKT_RX_IPV6_HDR_EXT))
> -#define OLFLAGS_MASK_V   (((uint64_t)OLFLAGS_MASK << 48) | \
> -			  ((uint64_t)OLFLAGS_MASK << 32) | \
> -			  ((uint64_t)OLFLAGS_MASK << 16) | \
> -			  ((uint64_t)OLFLAGS_MASK))
> -#define PTYPE_SHIFT    (1)
> +#define OLFLAGS_MASK_V   (((uint64_t)PKT_RX_VLAN_PKT << 48) | \
> +			  ((uint64_t)PKT_RX_VLAN_PKT << 32) | \
> +			  ((uint64_t)PKT_RX_VLAN_PKT << 16) | \
> +			  ((uint64_t)PKT_RX_VLAN_PKT))
>  #define VTAG_SHIFT     (3)
>  
>  static inline void
>  desc_to_olflags_v(__m128i descs[4], struct rte_mbuf **rx_pkts)
>  {
> -	__m128i ptype0, ptype1, vtag0, vtag1;
> +	__m128i vtag0, vtag1;
>  	union {
>  		uint16_t e[4];
>  		uint64_t dword;
>  	} vol;
>  
> -	ptype0 = _mm_unpacklo_epi16(descs[0], descs[1]);
> -	ptype1 = _mm_unpacklo_epi16(descs[2], descs[3]);
>  	vtag0 = _mm_unpackhi_epi16(descs[0], descs[1]);
>  	vtag1 = _mm_unpackhi_epi16(descs[2], descs[3]);
>  
> -	ptype1 = _mm_unpacklo_epi32(ptype0, ptype1);
>  	vtag1 = _mm_unpacklo_epi32(vtag0, vtag1);
> -
> -	ptype1 = _mm_slli_epi16(ptype1, PTYPE_SHIFT);
>  	vtag1 = _mm_srli_epi16(vtag1, VTAG_SHIFT);
>  
> -	ptype1 = _mm_or_si128(ptype1, vtag1);
> -	vol.dword = _mm_cvtsi128_si64(ptype1) & OLFLAGS_MASK_V;
> +	vol.dword = _mm_cvtsi128_si64(vtag1) & OLFLAGS_MASK_V;
>  
>  	rx_pkts[0]->ol_flags = vol.e[0];
>  	rx_pkts[1]->ol_flags = vol.e[1];
>  	rx_pkts[2]->ol_flags = vol.e[2];
>  	rx_pkts[3]->ol_flags = vol.e[3];
>  }
> +
>  #else
>  #define desc_to_olflags_v(desc, rx_pkts) do {} while (0)
>  #endif
> @@ -204,6 +195,8 @@ _recv_raw_pkts_vec(struct igb_rx_queue *rxq, struct rte_mbuf **rx_pkts,
>  				0            /* ignore pkt_type field */
>  			);
>  	__m128i dd_check, eop_check;
> +	__m128i desc_mask = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF,
> +					  0xFFFFFFFF, 0xFFFF07F0);
>  
>  	if (unlikely(nb_pkts < RTE_IXGBE_VPMD_RX_BURST))
>  		return 0;
> @@ -239,7 +232,8 @@ _recv_raw_pkts_vec(struct igb_rx_queue *rxq, struct rte_mbuf **rx_pkts,
>  		0xFF, 0xFF,  /* skip high 16 bits pkt_len, zero out */
>  		13, 12,      /* octet 12~13, low 16 bits pkt_len */
>  		13, 12,      /* octet 12~13, 16 bits data_len */
> -		0xFF, 0xFF   /* skip pkt_type field */
> +		1,           /* octet 1, 8 bits pkt_type field */
> +		0            /* octet 0, 4 bits offset 4 pkt_type field */
>  		);
>  
>  	/* Cache is empty -> need to scan the buffer rings, but first move
> @@ -248,6 +242,7 @@ _recv_raw_pkts_vec(struct igb_rx_queue *rxq, struct rte_mbuf **rx_pkts,
>  
>  	/*
>  	 * A. load 4 packet in one loop
> +	 * [A*. mask out 4 unused dirty field in desc]
>  	 * B. copy 4 mbuf point from swring to rx_pkts
>  	 * C. calc the number of DD bits among the 4 packets
>  	 * [C*. extract the end-of-packet bit, if requested]
> @@ -289,6 +284,14 @@ _recv_raw_pkts_vec(struct igb_rx_queue *rxq, struct rte_mbuf **rx_pkts,
>  		/* B.2 copy 2 mbuf point into rx_pkts  */
>  		_mm_storeu_si128((__m128i *)&rx_pkts[pos+2], mbp2);
>  
> +		/* A* mask out 0~3 bits RSS type */
> +		descs[3] = _mm_and_si128(descs[3], desc_mask);
> +		descs[2] = _mm_and_si128(descs[2], desc_mask);
> +
> +		/* A* mask out 0~3 bits RSS type */
> +		descs[1] = _mm_and_si128(descs[1], desc_mask);
> +		descs[0] = _mm_and_si128(descs[0], desc_mask);
> +
>  		/* avoid compiler reorder optimization */
>  		rte_compiler_barrier();
>  
> @@ -301,7 +304,7 @@ _recv_raw_pkts_vec(struct igb_rx_queue *rxq, struct rte_mbuf **rx_pkts,
>  		/* C.1 4=>2 filter staterr info only */
>  		sterr_tmp1 = _mm_unpackhi_epi32(descs[1], descs[0]);
>  
> -		/* set ol_flags with packet type and vlan tag */
> +		/* set ol_flags with vlan packet type */
>  		desc_to_olflags_v(descs, &rx_pkts[pos]);
>  
>  		/* D.2 pkt 3,4 set in_port/nb_seg and remove crc */
> -- 
> 1.8.1.4
>