From patchwork Tue Oct 26 16:28:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Coquelin X-Patchwork-Id: 102951 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2BBDDA0547; Tue, 26 Oct 2021 18:29:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B37A941145; Tue, 26 Oct 2021 18:29:26 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id 742D441136 for ; Tue, 26 Oct 2021 18:29:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1635265762; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wYivXFg4vyA5ZfGVDqBt4ojn3XbeNJfgwAN3puFXSNg=; b=U2hv8OFbxhP5n6kIGGpcpFrs1q38F/ZiMcXHJ0tWxoqwc3fYhVKSp3ki/cy5uq+ylD1/3f C4NCxx+o9TKMFPh/TXqXJIpD5kY0l48zk4651ItRO9lk7mMkTzqguYfRdcQNmDZHmW4xny 5am6Qqr3mYUXWS1zhz9QHiEAyXCvyyU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-10-_7k-vjrWMAGvjeLVIDte8g-1; Tue, 26 Oct 2021 12:29:20 -0400 X-MC-Unique: _7k-vjrWMAGvjeLVIDte8g-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 734401397B00; Tue, 26 Oct 2021 16:29:19 +0000 (UTC) Received: from max-t490s.redhat.com (unknown [10.39.208.37]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7F7FB100E809; Tue, 26 Oct 2021 16:29:17 +0000 (UTC) From: Maxime Coquelin To: dev@dpdk.org, chenbo.xia@intel.com, jiayu.hu@intel.com, yuanx.wang@intel.com, wenwux.ma@intel.com, bruce.richardson@intel.com, john.mcnamara@intel.com Cc: Maxime Coquelin Date: Tue, 26 Oct 2021 18:28:53 +0200 Message-Id: <20211026162904.482987-5-maxime.coquelin@redhat.com> In-Reply-To: <20211026162904.482987-1-maxime.coquelin@redhat.com> References: <20211026162904.482987-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=maxime.coquelin@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [dpdk-dev] [PATCH v2 04/15] vhost: simplify async IO vectors iterators 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 Sender: "dev" This patch splits the iterator arrays in two, one for source and one for destination. The goal is make the code easier to understand. Signed-off-by: Maxime Coquelin Reviewed-by: Chenbo Xia --- lib/vhost/vhost.h | 5 +++-- lib/vhost/virtio_net.c | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h index 686f468eff..132c1b070e 100644 --- a/lib/vhost/vhost.h +++ b/lib/vhost/vhost.h @@ -48,7 +48,7 @@ #define MAX_PKT_BURST 32 -#define VHOST_MAX_ASYNC_IT (MAX_PKT_BURST * 2) +#define VHOST_MAX_ASYNC_IT (MAX_PKT_BURST) #define VHOST_MAX_ASYNC_VEC (BUF_VECTOR_MAX * 2) #define PACKED_DESC_ENQUEUE_USED_FLAG(w) \ @@ -132,7 +132,8 @@ struct vhost_async { /* operation callbacks for DMA */ struct rte_vhost_async_channel_ops ops; - struct rte_vhost_iov_iter it_pool[VHOST_MAX_ASYNC_IT]; + struct rte_vhost_iov_iter src_iov_iter[VHOST_MAX_ASYNC_IT]; + struct rte_vhost_iov_iter dst_iov_iter[VHOST_MAX_ASYNC_IT]; struct iovec src_iovec[VHOST_MAX_ASYNC_VEC]; struct iovec dst_iovec[VHOST_MAX_ASYNC_VEC]; diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c index 2a243701c0..f0d923704a 100644 --- a/lib/vhost/virtio_net.c +++ b/lib/vhost/virtio_net.c @@ -1511,7 +1511,8 @@ virtio_dev_rx_async_submit_split(struct virtio_net *dev, uint16_t avail_head; struct vhost_async *async = vq->async; - struct rte_vhost_iov_iter *it_pool = async->it_pool; + struct rte_vhost_iov_iter *src_iter = async->src_iov_iter; + struct rte_vhost_iov_iter *dst_iter = async->dst_iov_iter; struct rte_vhost_async_desc tdes[MAX_PKT_BURST]; struct iovec *src_iovec = async->src_iovec; struct iovec *dst_iovec = async->dst_iovec; @@ -1547,20 +1548,19 @@ virtio_dev_rx_async_submit_split(struct virtio_net *dev, if (async_mbuf_to_desc(dev, vq, pkts[pkt_idx], buf_vec, nr_vec, num_buffers, &src_iovec[iovec_idx], &dst_iovec[iovec_idx], - &it_pool[it_idx], &it_pool[it_idx + 1]) < 0) { + &src_iter[it_idx], &dst_iter[it_idx]) < 0) { vq->shadow_used_idx -= num_buffers; break; } - async_fill_desc(&tdes[pkt_burst_idx++], &it_pool[it_idx], - &it_pool[it_idx + 1]); + async_fill_desc(&tdes[pkt_burst_idx++], &src_iter[it_idx], &dst_iter[it_idx]); slot_idx = (async->pkts_idx + pkt_idx) & (vq->size - 1); pkts_info[slot_idx].descs = num_buffers; pkts_info[slot_idx].mbuf = pkts[pkt_idx]; - iovec_idx += it_pool[it_idx].nr_segs; - it_idx += 2; + iovec_idx += src_iter[it_idx].nr_segs; + it_idx++; vq->last_avail_idx += num_buffers; @@ -1829,7 +1829,8 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev, uint16_t num_descs; struct vhost_async *async = vq->async; - struct rte_vhost_iov_iter *it_pool = async->it_pool; + struct rte_vhost_iov_iter *src_iter = async->src_iov_iter; + struct rte_vhost_iov_iter *dst_iter = async->dst_iov_iter; struct rte_vhost_async_desc tdes[MAX_PKT_BURST]; struct iovec *src_iovec = async->src_iovec; struct iovec *dst_iovec = async->dst_iovec; @@ -1846,18 +1847,17 @@ virtio_dev_rx_async_submit_packed(struct virtio_net *dev, if (unlikely(virtio_dev_rx_async_packed(dev, vq, pkts[pkt_idx], &num_descs, &num_buffers, &src_iovec[iovec_idx], &dst_iovec[iovec_idx], - &it_pool[it_idx], &it_pool[it_idx + 1]) < 0)) + &src_iter[it_idx], &dst_iter[it_idx]) < 0)) break; slot_idx = (async->pkts_idx + pkt_idx) % vq->size; - async_fill_desc(&tdes[pkt_burst_idx++], &it_pool[it_idx], - &it_pool[it_idx + 1]); + async_fill_desc(&tdes[pkt_burst_idx++], &src_iter[it_idx], &dst_iter[it_idx]); pkts_info[slot_idx].descs = num_descs; pkts_info[slot_idx].nr_buffers = num_buffers; pkts_info[slot_idx].mbuf = pkts[pkt_idx]; - iovec_idx += it_pool[it_idx].nr_segs; - it_idx += 2; + iovec_idx += src_iter[it_idx].nr_segs; + it_idx++; pkt_idx++; remained--;