> -----Original Message----- > From: Ding, Xuan <xuan.d...@intel.com> > Sent: Friday, June 24, 2022 1:38 PM > To: maxime.coque...@redhat.com; Xia, Chenbo <chenbo....@intel.com> > Cc: dev@dpdk.org; Hu, Jiayu <jiayu...@intel.com>; Ling, WeiX > <weix.l...@intel.com>; Ding, Xuan <xuan.d...@intel.com> > Subject: [PATCH] vhost: fix sync dequeue offload > > From: Xuan Ding <xuan.d...@intel.com> > > This patch fixes the missing virtio net header copy in sync > dequeue path caused by refactoring, which affects dequeue > offloading. > > Fixes: 6d823bb302c7("vhost: prepare sync for descriptor to mbuf > refactoring") > > Signed-off-by: Xuan Ding <xuan.d...@intel.com> > --- > lib/vhost/virtio_net.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c > index 68a26eb17d..d5a9f7c691 100644 > --- a/lib/vhost/virtio_net.c > +++ b/lib/vhost/virtio_net.c > @@ -2635,9 +2635,17 @@ desc_to_mbuf(struct virtio_net *dev, struct > vhost_virtqueue *vq, > buf_iova + buf_offset, cpy_len, > false) < > 0) > goto error; > } else { > - sync_fill_seg(dev, vq, cur, mbuf_offset, > - buf_addr + buf_offset, > - buf_iova + buf_offset, cpy_len, false); > + if (hdr && cur == m) { > + rte_memcpy(rte_pktmbuf_mtod_offset(cur, void *, > mbuf_offset), > + (void *)((uintptr_t)(buf_addr + > buf_offset)), > + cpy_len); > + vhost_log_cache_write_iova(dev, vq, buf_iova + > buf_offset, cpy_len); > + PRINT_PACKET(dev, (uintptr_t)(buf_addr + > buf_offset), cpy_len, 0);
Although above logic can also be included in func sync_fill_seg, but it will need to add a new dequeue-specific param, so I would think this patch is fine. During review of this patch, I also notice one bug that writes dirty page log when doing dequeue. But it's not related to this patch. So: Reviewed-by: Chenbo Xia <chenbo....@intel.com> > + } else { > + sync_fill_seg(dev, vq, cur, mbuf_offset, > + buf_addr + buf_offset, > + buf_iova + buf_offset, cpy_len, false); > + } > } > > mbuf_avail -= cpy_len; > -- > 2.17.1