From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id EFB098DB4 for ; Wed, 28 Oct 2015 14:58:37 +0100 (CET) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga102.fm.intel.com with ESMTP; 28 Oct 2015 06:58:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,210,1444719600"; d="scan'208";a="821456268" Received: from shwdeisgchi017.ccr.corp.intel.com (HELO [10.239.66.70]) ([10.239.66.70]) by fmsmga001.fm.intel.com with ESMTP; 28 Oct 2015 06:58:35 -0700 Message-ID: <5630D48A.9000809@intel.com> Date: Wed, 28 Oct 2015 21:58:34 +0800 From: "Liang, Cunming" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: "Chen Jing D(Mark)" , dev@dpdk.org References: <1445507104-22563-2-git-send-email-jing.d.chen@intel.com> <1445939209-12783-1-git-send-email-jing.d.chen@intel.com> <1445939209-12783-5-git-send-email-jing.d.chen@intel.com> In-Reply-To: <1445939209-12783-5-git-send-email-jing.d.chen@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v3 04/16] fm10k: add func to re-allocate mbuf for RX ring X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Oct 2015 13:58:38 -0000 Hi Mark, On 10/27/2015 5:46 PM, Chen Jing D(Mark) wrote: > From: "Chen Jing D(Mark)" > > Add function fm10k_rxq_rearm to re-allocate mbuf for used desc > in RX HW ring. > > Signed-off-by: Chen Jing D(Mark) > --- > drivers/net/fm10k/fm10k.h | 9 ++++ > drivers/net/fm10k/fm10k_ethdev.c | 3 + > drivers/net/fm10k/fm10k_rxtx_vec.c | 90 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 102 insertions(+), 0 deletions(-) [...] > +static inline void > +fm10k_rxq_rearm(struct fm10k_rx_queue *rxq) > +{ > + int i; > + uint16_t rx_id; > + volatile union fm10k_rx_desc *rxdp; > + struct rte_mbuf **mb_alloc = &rxq->sw_ring[rxq->rxrearm_start]; > + struct rte_mbuf *mb0, *mb1; > + __m128i head_off = _mm_set_epi64x( > + RTE_PKTMBUF_HEADROOM + FM10K_RX_DATABUF_ALIGN - 1, > + RTE_PKTMBUF_HEADROOM + FM10K_RX_DATABUF_ALIGN - 1); > + __m128i dma_addr0, dma_addr1; > + /* Rx buffer need to be aligned with 512 byte */ > + const __m128i hba_msk = _mm_set_epi64x(0, > + UINT64_MAX - FM10K_RX_DATABUF_ALIGN + 1); > + > + rxdp = rxq->hw_ring + rxq->rxrearm_start; > + > + /* Pull 'n' more MBUFs into the software ring */ > + if (rte_mempool_get_bulk(rxq->mp, > + (void *)mb_alloc, > + RTE_FM10K_RXQ_REARM_THRESH) < 0) { Here's one potential issue when the failure happens. As tail won't update, the head will equal to tail in the end. HW won't write back anyway, however the SW recv_raw_pkts_vec only check DD bit, the old 'dirty' descriptor(DD bit is not clean) will be taken and continue move forward to check the next which even beyond the tail. I'm sorry didn't catch it on the first time. /Steve > + rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed += > + RTE_FM10K_RXQ_REARM_THRESH; > + return; > + } > + > +