From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 964FBA0505; Thu, 7 Apr 2022 17:31:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 66B0B427EA; Thu, 7 Apr 2022 17:31:25 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 10B09410EF for ; Thu, 7 Apr 2022 17:31:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649345484; x=1680881484; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=2VH+SjfaaG4Xhj8kQbPRs1+1iteqmwcndhldFrh1n4k=; b=kbALmdxvTeWVUL8I0HepTxiLyTezwZHZoirgKCogjXJkXCnuodAtUk4W byeRs8+fgMwluY5+/pRNEv1wDTQfZNCo4crnWxK9SbHEqYVne6QZSB3c5 0ouzmp6Fy/75dQ16+W+e7U4JYfvPoSJ2AiKT1oyNsExrJlpdJNJqAzhzf rIBw4NSsFjMOgixdB96j9OWQi9gsgUPHCv6VS06tAncDeNpsNOQzGlGfI Lic13g9nqmsDSEOXiWYhGwz7LPL36idRU11n+GIvcCbY+ceVlUrzeZnY4 Xd5lREoLkzuf9zLWnHYE0IrlrzxY8ycWiXvuQvzU6Ip6dvmkKYwUj75lE w==; X-IronPort-AV: E=McAfee;i="6400,9594,10310"; a="322046046" X-IronPort-AV: E=Sophos;i="5.90,242,1643702400"; d="scan'208";a="322046046" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Apr 2022 08:31:23 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,242,1643702400"; d="scan'208";a="659104926" Received: from npg-dpdk-xuan-cbdma.sh.intel.com ([10.67.110.228]) by orsmga004.jf.intel.com with ESMTP; 07 Apr 2022 08:31:21 -0700 From: xuan.ding@intel.com To: maxime.coquelin@redhat.com, chenbo.xia@intel.com Cc: dev@dpdk.org, jiayu.hu@intel.com, cheng1.jiang@intel.com, sunil.pai.g@intel.com, liangma@liangbit.com, Xuan Ding Subject: [PATCH v1 3/5] vhost: merge sync and async descriptor to mbuf filling Date: Thu, 7 Apr 2022 15:25:44 +0000 Message-Id: <20220407152546.38167-4-xuan.ding@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220407152546.38167-1-xuan.ding@intel.com> References: <20220407152546.38167-1-xuan.ding@intel.com> X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Xuan Ding This patches refactors copy_desc_to_mbuf() used by the sync path to support both sync and async descriptor to mbuf filling. Signed-off-by: Xuan Ding --- lib/vhost/vhost.h | 1 + lib/vhost/virtio_net.c | 47 ++++++++++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h index a9edc271aa..9209558465 100644 --- a/lib/vhost/vhost.h +++ b/lib/vhost/vhost.h @@ -177,6 +177,7 @@ extern struct async_dma_info dma_copy_track[RTE_DMADEV_DEFAULT_MAX]; * inflight async packet information */ struct async_inflight_info { + struct virtio_net_hdr nethdr; struct rte_mbuf *mbuf; uint16_t descs; /* num of descs inflight */ uint16_t nr_buffers; /* num of buffers inflight for packed ring */ diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c index 709ff483a3..382e953c2d 100644 --- a/lib/vhost/virtio_net.c +++ b/lib/vhost/virtio_net.c @@ -2482,10 +2482,10 @@ copy_vnet_hdr_from_desc(struct virtio_net_hdr *hdr, } static __rte_always_inline int -copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, +desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, struct buf_vector *buf_vec, uint16_t nr_vec, struct rte_mbuf *m, struct rte_mempool *mbuf_pool, - bool legacy_ol_flags) + bool legacy_ol_flags, uint16_t slot_idx, bool is_async) { uint32_t buf_avail, buf_offset; uint64_t buf_addr, buf_iova, buf_len; @@ -2496,6 +2496,8 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, struct virtio_net_hdr *hdr = NULL; /* A counter to avoid desc dead loop chain */ uint16_t vec_idx = 0; + struct vhost_async *async = vq->async; + struct async_inflight_info *pkts_info; buf_addr = buf_vec[vec_idx].buf_addr; buf_iova = buf_vec[vec_idx].buf_iova; @@ -2548,12 +2550,25 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, mbuf_offset = 0; mbuf_avail = m->buf_len - RTE_PKTMBUF_HEADROOM; + + if (is_async) { + pkts_info = async->pkts_info; + if (async_iter_initialize(dev, async)) + return -1; + } + while (1) { cpy_len = RTE_MIN(buf_avail, mbuf_avail); - sync_fill_seg(dev, vq, m, mbuf_offset, - buf_addr + buf_offset, - buf_iova + buf_offset, cpy_len, true); + if (is_async) { + if (async_fill_seg(dev, vq, m, mbuf_offset, + buf_iova + buf_offset, cpy_len, false) < 0) + goto error; + } else { + sync_fill_seg(dev, vq, m, mbuf_offset, + buf_addr + buf_offset, + buf_iova + buf_offset, cpy_len, true); + } mbuf_avail -= cpy_len; mbuf_offset += cpy_len; @@ -2602,11 +2617,20 @@ copy_desc_to_mbuf(struct virtio_net *dev, struct vhost_virtqueue *vq, prev->data_len = mbuf_offset; m->pkt_len += mbuf_offset; - if (hdr) - vhost_dequeue_offload(dev, hdr, m, legacy_ol_flags); + if (hdr) { + if (is_async) { + async_iter_finalize(async); + pkts_info[slot_idx].nethdr = *hdr; + } else { + vhost_dequeue_offload(dev, hdr, m, legacy_ol_flags); + } + } return 0; error: + if (is_async) + async_iter_cancel(async); + return -1; } @@ -2738,8 +2762,8 @@ virtio_dev_tx_split(struct virtio_net *dev, struct vhost_virtqueue *vq, break; } - err = copy_desc_to_mbuf(dev, vq, buf_vec, nr_vec, pkts[i], - mbuf_pool, legacy_ol_flags); + err = desc_to_mbuf(dev, vq, buf_vec, nr_vec, pkts[i], + mbuf_pool, legacy_ol_flags, 0, false); if (unlikely(err)) { if (!allocerr_warned) { VHOST_LOG_DATA(ERR, "(%s) failed to copy desc to mbuf.\n", @@ -2750,6 +2774,7 @@ virtio_dev_tx_split(struct virtio_net *dev, struct vhost_virtqueue *vq, i++; break; } + } if (dropped) @@ -2931,8 +2956,8 @@ vhost_dequeue_single_packed(struct virtio_net *dev, return -1; } - err = copy_desc_to_mbuf(dev, vq, buf_vec, nr_vec, pkts, - mbuf_pool, legacy_ol_flags); + err = desc_to_mbuf(dev, vq, buf_vec, nr_vec, pkts, + mbuf_pool, legacy_ol_flags, 0, false); if (unlikely(err)) { if (!allocerr_warned) { VHOST_LOG_DATA(ERR, "(%s) failed to copy desc to mbuf.\n", -- 2.17.1