I have sent out another patch which has already included such fix, That patch also fix other issue in rx path, and it is in reworking, I will send out the v2 version soon. Accordingly, this patch is a duplicated one. Thanks Changchun
> -----Original Message----- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Wei li > Sent: Thursday, May 28, 2015 4:20 PM > To: dev at dpdk.org > Subject: [dpdk-dev] [PATCH] vhost: tcp pkt with virtio header in one desc > > Signed-off-by: Wei li <liw at dtdream.com> > --- > lib/librte_vhost/vhost_rxtx.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/lib/librte_vhost/vhost_rxtx.c b/lib/librte_vhost/vhost_rxtx.c > index 4809d32..2d3ea92 100644 > --- a/lib/librte_vhost/vhost_rxtx.c > +++ b/lib/librte_vhost/vhost_rxtx.c > @@ -588,8 +588,19 @@ rte_vhost_dequeue_burst(struct virtio_net *dev, > uint16_t queue_id, > > desc = &vq->desc[head[entry_success]]; > > - /* Discard first buffer as it is the virtio header */ > - desc = &vq->desc[desc->next]; > + if (desc->flags & VRING_DESC_F_NEXT) > + { > + /* Discard first buffer as it is the virtio header */ > + desc = &vq->desc[desc->next]; > + vb_offset = 0; > + vb_avail = desc->len; > + } > + else /* virtio header in one desc with real pkt */ > + { > + /* strip the virtio header */ > + vb_offset = vq->vhost_hlen; > + vb_avail = desc->len - vq->vhost_hlen; > + } > > /* Buffer address translation. */ > vb_addr = gpa_to_vva(dev, desc->addr); @@ -608,8 +619,6 > @@ rte_vhost_dequeue_burst(struct virtio_net *dev, uint16_t queue_id, > vq->used->ring[used_idx].id = head[entry_success]; > vq->used->ring[used_idx].len = 0; > > - vb_offset = 0; > - vb_avail = desc->len; > /* Allocate an mbuf and populate the structure. */ > m = rte_pktmbuf_alloc(mbuf_pool); > if (unlikely(m == NULL)) { > -- > 1.9.5.msysgit.1 >