From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stable-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id 78E07A0471
	for <public@inbox.dpdk.org>; Mon, 17 Jun 2019 10:55:44 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 297B91BE83;
	Mon, 17 Jun 2019 10:55:44 +0200 (CEST)
Received: from mga07.intel.com (mga07.intel.com [134.134.136.100])
 by dpdk.org (Postfix) with ESMTP id B2D081BE5C;
 Mon, 17 Jun 2019 10:55:40 +0200 (CEST)
X-Amp-Result: UNSCANNABLE
X-Amp-File-Uploaded: False
Received: from fmsmga006.fm.intel.com ([10.253.24.20])
 by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 17 Jun 2019 01:55:39 -0700
X-ExtLoop1: 1
Received: from npg-dpdk-virtio-tbie-2.sh.intel.com (HELO ___) ([10.67.104.151])
 by fmsmga006.fm.intel.com with ESMTP; 17 Jun 2019 01:55:38 -0700
Date: Mon, 17 Jun 2019 16:54:26 +0800
From: Tiwei Bie <tiwei.bie@intel.com>
To: Andrew Rybchenko <arybchenko@solarflare.com>
Cc: Maxime Coquelin <maxime.coquelin@redhat.com>,
 Zhihong Wang <zhihong.wang@intel.com>, dev@dpdk.org,
 Dilshod Urazov <Dilshod.Urazov@oktetlabs.ru>, stable@dpdk.org
Message-ID: <20190617085426.GC17273@___>
References: <1559587805-1637-1-git-send-email-arybchenko@solarflare.com>
 <1560680229-8166-1-git-send-email-arybchenko@solarflare.com>
 <1560680229-8166-2-git-send-email-arybchenko@solarflare.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
In-Reply-To: <1560680229-8166-2-git-send-email-arybchenko@solarflare.com>
User-Agent: Mutt/1.9.4 (2018-02-28)
Subject: Re: [dpdk-stable] [PATCH v3 2/2] net/virtio: move VLAN tag
	insertion to Tx prepare
X-BeenThere: stable@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches for DPDK stable branches <stable.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/stable>,
 <mailto:stable-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/stable/>
List-Post: <mailto:stable@dpdk.org>
List-Help: <mailto:stable-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/stable>,
 <mailto:stable-request@dpdk.org?subject=subscribe>
Errors-To: stable-bounces@dpdk.org
Sender: "stable" <stable-bounces@dpdk.org>

On Sun, Jun 16, 2019 at 11:17:09AM +0100, Andrew Rybchenko wrote:
> From: Dilshod Urazov <Dilshod.Urazov@oktetlabs.ru>
> 
> VLAN tag insertion should be in Tx prepare, not in Tx burst functions.

Please add some details in the commit log.

Thanks,
Tiwei


> 
> Fixes: 4fb7e803eb1a ("ethdev: add Tx preparation")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Dilshod Urazov <Dilshod.Urazov@oktetlabs.ru>
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
> ---
>  drivers/net/virtio/virtio_rxtx.c | 50 +++++++++-----------------------
>  1 file changed, 14 insertions(+), 36 deletions(-)
> 
> diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
> index 07f8f47de..dcce39e8c 100644
> --- a/drivers/net/virtio/virtio_rxtx.c
> +++ b/drivers/net/virtio/virtio_rxtx.c
> @@ -1966,6 +1966,20 @@ virtio_xmit_pkts_prepare(void *tx_queue __rte_unused, struct rte_mbuf **tx_pkts,
>  		}
>  #endif
>  
> +		/* Do VLAN tag insertion */
> +		if (unlikely(m->ol_flags & PKT_TX_VLAN_PKT)) {
> +			error = rte_vlan_insert(&m);
> +			/* rte_vlan_insert() may change pointer
> +			 * even in the case of failure
> +			 */
> +			tx_pkts[nb_tx] = m;
> +
> +			if (unlikely(error)) {
> +				rte_errno = -error;
> +				break;
> +			}
> +		}
> +
>  		error = rte_net_intel_cksum_prepare(m);
>  		if (unlikely(error)) {
>  			rte_errno = -error;
> @@ -1989,7 +2003,6 @@ virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
>  	uint16_t hdr_size = hw->vtnet_hdr_size;
>  	uint16_t nb_tx = 0;
>  	bool in_order = hw->use_inorder_tx;
> -	int error;
>  
>  	if (unlikely(hw->started == 0 && tx_pkts != hw->inject_pkts))
>  		return nb_tx;
> @@ -2007,17 +2020,6 @@ virtio_xmit_pkts_packed(void *tx_queue, struct rte_mbuf **tx_pkts,
>  		struct rte_mbuf *txm = tx_pkts[nb_tx];
>  		int can_push = 0, slots, need;
>  
> -		/* Do VLAN tag insertion */
> -		if (unlikely(txm->ol_flags & PKT_TX_VLAN_PKT)) {
> -			error = rte_vlan_insert(&txm);
> -			if (unlikely(error)) {
> -				rte_pktmbuf_free(txm);
> -				continue;
> -			}
> -			/* vlan_insert may add a header mbuf */
> -			tx_pkts[nb_tx] = txm;
> -		}
> -
>  		/* optimize ring usage */
>  		if ((vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) ||
>  		      vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) &&
> @@ -2077,7 +2079,6 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
>  	struct virtio_hw *hw = vq->hw;
>  	uint16_t hdr_size = hw->vtnet_hdr_size;
>  	uint16_t nb_used, nb_tx = 0;
> -	int error;
>  
>  	if (unlikely(hw->started == 0 && tx_pkts != hw->inject_pkts))
>  		return nb_tx;
> @@ -2096,17 +2097,6 @@ virtio_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
>  		struct rte_mbuf *txm = tx_pkts[nb_tx];
>  		int can_push = 0, use_indirect = 0, slots, need;
>  
> -		/* Do VLAN tag insertion */
> -		if (unlikely(txm->ol_flags & PKT_TX_VLAN_PKT)) {
> -			error = rte_vlan_insert(&txm);
> -			if (unlikely(error)) {
> -				rte_pktmbuf_free(txm);
> -				continue;
> -			}
> -			/* vlan_insert may add a header mbuf */
> -			tx_pkts[nb_tx] = txm;
> -		}
> -
>  		/* optimize ring usage */
>  		if ((vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) ||
>  		      vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) &&
> @@ -2176,7 +2166,6 @@ virtio_xmit_pkts_inorder(void *tx_queue,
>  	uint16_t hdr_size = hw->vtnet_hdr_size;
>  	uint16_t nb_used, nb_avail, nb_tx = 0, nb_inorder_pkts = 0;
>  	struct rte_mbuf *inorder_pkts[nb_pkts];
> -	int error;
>  
>  	if (unlikely(hw->started == 0 && tx_pkts != hw->inject_pkts))
>  		return nb_tx;
> @@ -2201,17 +2190,6 @@ virtio_xmit_pkts_inorder(void *tx_queue,
>  		struct rte_mbuf *txm = tx_pkts[nb_tx];
>  		int slots, need;
>  
> -		/* Do VLAN tag insertion */
> -		if (unlikely(txm->ol_flags & PKT_TX_VLAN_PKT)) {
> -			error = rte_vlan_insert(&txm);
> -			if (unlikely(error)) {
> -				rte_pktmbuf_free(txm);
> -				continue;
> -			}
> -			/* vlan_insert may add a header mbuf */
> -			tx_pkts[nb_tx] = txm;
> -		}
> -
>  		/* optimize ring usage */
>  		if ((vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) ||
>  		     vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) &&
> -- 
> 2.17.1
>