From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 00E022A5F for ; Thu, 29 Oct 2015 06:24:17 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP; 28 Oct 2015 22:24:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,213,1444719600"; d="scan'208";a="674061231" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga003.jf.intel.com with ESMTP; 28 Oct 2015 22:24:17 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 28 Oct 2015 22:24:16 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 28 Oct 2015 22:24:15 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.253]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.194]) with mapi id 14.03.0248.002; Thu, 29 Oct 2015 13:24:14 +0800 From: "Chen, Jing D" To: "Liang, Cunming" , "dev@dpdk.org" Thread-Topic: [PATCH v3 04/16] fm10k: add func to re-allocate mbuf for RX ring Thread-Index: AQHREJx7680eaMM7gUWaoG2lTNJ/+Z6AaiMAgAGFNkA= Date: Thu, 29 Oct 2015 05:24:13 +0000 Message-ID: <4341B239C0EFF9468EE453F9E9F4604D02AE60F4@shsmsx102.ccr.corp.intel.com> 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> <5630D48A.9000809@intel.com> In-Reply-To: <5630D48A.9000809@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 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: Thu, 29 Oct 2015 05:24:18 -0000 Hi, Steve, Best Regards, Mark > -----Original Message----- > From: Liang, Cunming > Sent: Wednesday, October 28, 2015 9:59 PM > To: Chen, Jing D; dev@dpdk.org > Cc: Tao, Zhe; He, Shaopeng; Ananyev, Konstantin; Richardson, Bruce > Subject: Re: [PATCH v3 04/16] fm10k: add func to re-allocate mbuf for RX = ring >=20 > Hi Mark, >=20 > 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 =3D &rxq->sw_ring[rxq->rxrearm_start]; > > + struct rte_mbuf *mb0, *mb1; > > + __m128i head_off =3D _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 =3D _mm_set_epi64x(0, > > + UINT64_MAX - FM10K_RX_DATABUF_ALIGN > + 1); > > + > > + rxdp =3D 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 I have a different view on this. In case mbuf allocation always failed and = tail equaled to head,=20 then HW will stop to send new packet to HW ring, as you pointed out. Then, = when=20 Mbuf can be allocated, this function will refill HW ring and update tail. S= o, HW will=20 resume to fill packet to HW ring. Receive functions will continue to work. = Anything I missed? > > + rte_eth_devices[rxq->port_id].data->rx_mbuf_alloc_failed > +=3D > > + RTE_FM10K_RXQ_REARM_THRESH; > > + return; > > + } > > + > > +