From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id F22741BBE for ; Fri, 19 Aug 2016 04:30:24 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga103.jf.intel.com with ESMTP; 18 Aug 2016 19:30:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,543,1464678000"; d="scan'208";a="1028088044" Received: from yliu-dev.sh.intel.com (HELO yliu-dev) ([10.239.67.162]) by fmsmga001.fm.intel.com with ESMTP; 18 Aug 2016 19:30:22 -0700 Date: Fri, 19 Aug 2016 10:39:24 +0800 From: Yuanhan Liu To: Zhihong Wang Cc: dev@dpdk.org, maxime.coquelin@redhat.com Message-ID: <20160819023924.GA30752@yliu-dev.sh.intel.com> References: <1471319402-112998-1-git-send-email-zhihong.wang@intel.com> <1471501991-37257-1-git-send-email-zhihong.wang@intel.com> <1471501991-37257-2-git-send-email-zhihong.wang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1471501991-37257-2-git-send-email-zhihong.wang@intel.com> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [dpdk-dev] [PATCH v2 1/6] vhost: rewrite enqueue 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: Fri, 19 Aug 2016 02:30:25 -0000 On Thu, Aug 18, 2016 at 02:33:06AM -0400, Zhihong Wang wrote: > This patch implements the vhost logic from scratch into a single function > designed for high performance and better maintainability. > > Signed-off-by: Zhihong Wang > --- > lib/librte_vhost/vhost_rxtx.c | 212 ++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 205 insertions(+), 7 deletions(-) > > diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c > index 08a73fd..8e6d782 100644 > --- a/lib/librte_vhost/vhost_rxtx.c > +++ b/lib/librte_vhost/vhost_rxtx.c > @@ -91,7 +91,7 @@ is_valid_virt_queue_idx(uint32_t idx, int is_tx, uint32_t qp_nb) > return (is_tx ^ (idx & 1)) == 0 && idx < qp_nb * VIRTIO_QNUM; > } > > -static void > +static inline void __attribute__((always_inline)) > virtio_enqueue_offload(struct rte_mbuf *m_buf, struct virtio_net_hdr *net_hdr) > { > if (m_buf->ol_flags & PKT_TX_L4_MASK) { > @@ -533,19 +533,217 @@ virtio_dev_merge_rx(struct virtio_net *dev, uint16_t queue_id, > return pkt_idx; > } > > +static inline uint32_t __attribute__((always_inline)) > +loop_check(struct vhost_virtqueue *vq, uint16_t avail_idx, uint32_t pkt_left) > +{ > + if (pkt_left == 0 || avail_idx == vq->last_used_idx) > + return 1; > + > + return 0; > +} Hmmm, I don't see any benifit from making such simple check into a function. > +static inline uint32_t __attribute__((always_inline)) > +enqueue_packet(struct virtio_net *dev, struct vhost_virtqueue *vq, > + uint16_t avail_idx, struct rte_mbuf *mbuf, > + uint32_t is_mrg_rxbuf) > +{ > + struct virtio_net_hdr_mrg_rxbuf *virtio_hdr; > + struct vring_desc *desc; > + uint64_t desc_host_write_addr = 0; > + uint32_t desc_chain_head = 0; > + uint32_t desc_chain_len = 0; > + uint32_t desc_current = 0; > + uint32_t desc_write_offset = 0; > + uint32_t mbuf_len = 0; > + uint32_t mbuf_len_left = 0; > + uint32_t copy_len = 0; The dequeue function uses var like desc_addr, desc_avail, desc_offset, mbuf_avail, ..., I see no reason to use something different here. This breaks the code consistency. Besides that, var name like desc_host_write_addr looks redundant; desc_addr is much cleaner. --yliu