From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yuanhan Liu Subject: Re: [PATCH v7 3/7] vhost: simplify mergeable Rx vring reservation Date: Wed, 26 Oct 2016 10:56:17 +0800 Message-ID: <20161026025617.GY16751@yliu-dev.sh.intel.com> References: <1474336817-22683-1-git-send-email-zhihong.wang@intel.com> <1476437678-7102-1-git-send-email-yuanhan.liu@linux.intel.com> <1476437678-7102-4-git-send-email-yuanhan.liu@linux.intel.com> <4827637.JFOYA5HLyK@xps13> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Cc: dev@dpdk.org To: Thomas Monjalon Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 29B742BCE for ; Wed, 26 Oct 2016 04:55:31 +0200 (CEST) Content-Disposition: inline In-Reply-To: <4827637.JFOYA5HLyK@xps13> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, Oct 26, 2016 at 12:08:49AM +0200, Thomas Monjalon wrote: > 2016-10-14 17:34, Yuanhan Liu: > > -static inline uint32_t __attribute__((always_inline)) > > +static inline int __attribute__((always_inline)) > > copy_mbuf_to_desc_mergeable(struct virtio_net *dev, struct vhost_virtqueue *vq, > > - uint16_t end_idx, struct rte_mbuf *m, > > - struct buf_vector *buf_vec) > > + struct rte_mbuf *m, struct buf_vector *buf_vec, > > + uint16_t num_buffers) > > { > > struct virtio_net_hdr_mrg_rxbuf virtio_hdr = {{0, 0, 0, 0, 0, 0}, 0}; > > uint32_t vec_idx = 0; > > - uint16_t start_idx = vq->last_used_idx; > > - uint16_t cur_idx = start_idx; > > + uint16_t cur_idx = vq->last_used_idx; > > uint64_t desc_addr; > > uint32_t desc_chain_head; > > uint32_t desc_chain_len; > > @@ -394,21 +393,21 @@ copy_mbuf_to_desc_mergeable(struct virtio_net *dev, struct vhost_virtqueue *vq, > > struct rte_mbuf *hdr_mbuf; > > > > if (unlikely(m == NULL)) > > - return 0; > > + return -1; > > > > LOG_DEBUG(VHOST_DATA, "(%d) current index %d | end index %d\n", > > dev->vid, cur_idx, end_idx); > > There is a build error: > lib/librte_vhost/virtio_net.c:399:22: error: ‘end_idx’ undeclared Oops... you know, my robot is broken since the holiday :( I just had a quick fix. Hopefully, it will start working again... > It is probably trivial and could be fixed directly in the already applied > commit in next-virtio. Yes, and FYI, here is the overall diffs I made to fix this bug. --yliu --- diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c index b784dba..eed0b1c 100644 --- a/lib/librte_vhost/virtio_net.c +++ b/lib/librte_vhost/virtio_net.c @@ -443,9 +443,6 @@ copy_mbuf_to_desc_mergeable(struct virtio_net *dev, struct rte_mbuf *m, if (unlikely(m == NULL)) return -1; - LOG_DEBUG(VHOST_DATA, "(%d) current index %d | end index %d\n", - dev->vid, cur_idx, end_idx); - desc_addr = gpa_to_vva(dev, buf_vec[vec_idx].buf_addr); if (buf_vec[vec_idx].buf_len < dev->vhost_hlen || !desc_addr) return -1; @@ -555,6 +552,10 @@ virtio_dev_merge_rx(struct virtio_net *dev, uint16_t queue_id, break; } + LOG_DEBUG(VHOST_DATA, "(%d) current index %d | end index %d\n", + dev->vid, vq->last_avail_idx, + vq->last_avail_idx + num_buffers); + if (copy_mbuf_to_desc_mergeable(dev, pkts[pkt_idx], buf_vec, num_buffers) < 0) { vq->shadow_used_idx -= num_buffers;