On Sun, 6 Sep 2015 08:40:44 +0000 "Ouyang, Changchun" <changchun.ouyang at intel.com> wrote:
> > @@ -220,11 +221,26 @@ virtqueue_enqueue_xmit(struct virtqueue *txvq, > > struct rte_mbuf *cookie) > > dxp = &txvq->vq_descx[idx]; > > dxp->cookie = (void *)cookie; > > dxp->ndescs = needed; > > - > > start_dp = txvq->vq_ring.desc; > > - start_dp[idx].addr = > > - txvq->virtio_net_hdr_mem + idx * head_size; > > - start_dp[idx].len = (uint32_t)head_size; > > + > > + if (use_indirect) { > > + offs = offsetof(struct virtio_tx_region, tx_indir) > > + + idx * sizeof(struct virtio_tx_region); > > + > > + start_dp[idx].addr = txvq->virtio_net_hdr_mem + offs; > > + start_dp[idx].len = sizeof(struct vring_desc); > > Should the length be N * sizeof(struct vring_desc)? Yes.