vhost: fix dequeue offload support
authorTiwei Bie <tiwei.bie@intel.com>
Tue, 24 Oct 2017 03:12:30 +0000 (11:12 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 24 Oct 2017 19:31:23 +0000 (21:31 +0200)
When offload is enabled, vhost needs to access the first mbuf
to get the packet info, e.g. TCP header. So we couldn't delay
the data copy in this case.

Fixes: e5c494a7a22b ("vhost: batch small guest memory copies")

Reported-by: Lei Yao <lei.a.yao@intel.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
lib/librte_vhost/virtio_net.c

index b75c93c..3c6f1a5 100644 (file)
@@ -987,7 +987,8 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq,
                        mbuf_avail = cpy_len;
                } else {
                        if (likely(cpy_len > MAX_BATCH_LEN ||
-                                  copy_nb >= vq->size)) {
+                                  copy_nb >= vq->size ||
+                                  (hdr && cur == m))) {
                                rte_memcpy(rte_pktmbuf_mtod_offset(cur, void *,
                                                                   mbuf_offset),
                                           (void *)((uintptr_t)(desc_addr +