[v2,04/15] vhost: simplify async IO vectors iterators
Checks
Commit Message
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 <maxime.coquelin@redhat.com>
---
lib/vhost/vhost.h | 5 +++--
lib/vhost/virtio_net.c | 24 ++++++++++++------------
2 files changed, 15 insertions(+), 14 deletions(-)
Comments
> -----Original Message-----
> From: Maxime Coquelin <maxime.coquelin@redhat.com>
> Sent: Wednesday, October 27, 2021 12:29 AM
> To: dev@dpdk.org; Xia, Chenbo <chenbo.xia@intel.com>; Hu, Jiayu
> <jiayu.hu@intel.com>; Wang, YuanX <yuanx.wang@intel.com>; Ma, WenwuX
> <wenwux.ma@intel.com>; Richardson, Bruce <bruce.richardson@intel.com>;
> Mcnamara, John <john.mcnamara@intel.com>
> Cc: Maxime Coquelin <maxime.coquelin@redhat.com>
> Subject: [PATCH v2 04/15] vhost: simplify async IO vectors iterators
>
> 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 <maxime.coquelin@redhat.com>
> ---
> 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--;
> --
> 2.31.1
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
@@ -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];
@@ -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--;