[v4,1/2] vhost: cleanup async enqueue

Message ID 1610367387-117188-2-git-send-email-jiayu.hu@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Maxime Coquelin
Headers
Series Enhance Async Enqueue for Small Packets |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Hu, Jiayu Jan. 11, 2021, 12:16 p.m. UTC
  This patch removes unnecessary check and function calls, and it changes
appropriate types for internal variables and fixes typos.

Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Tested-by: Yinan Wang <yinan.wang@intel.com>
---
 lib/librte_vhost/rte_vhost_async.h |  8 ++++----
 lib/librte_vhost/virtio_net.c      | 16 ++++++++--------
 2 files changed, 12 insertions(+), 12 deletions(-)
  

Comments

Maxime Coquelin Jan. 11, 2021, 11:04 a.m. UTC | #1
On 1/11/21 1:16 PM, Jiayu Hu wrote:
> This patch removes unnecessary check and function calls, and it changes
> appropriate types for internal variables and fixes typos.
> 
> Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
> Tested-by: Yinan Wang <yinan.wang@intel.com>
> ---
>  lib/librte_vhost/rte_vhost_async.h |  8 ++++----
>  lib/librte_vhost/virtio_net.c      | 16 ++++++++--------
>  2 files changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/lib/librte_vhost/rte_vhost_async.h b/lib/librte_vhost/rte_vhost_async.h
> index c73bd7c..03bd558 100644
> --- a/lib/librte_vhost/rte_vhost_async.h
> +++ b/lib/librte_vhost/rte_vhost_async.h
> @@ -112,7 +112,7 @@ struct rte_vhost_async_features {
>  };
>  
>  /**
> - * register a async channel for vhost
> + * register an async channel for vhost
>   *
>   * @param vid
>   *  vhost device id async channel to be attached to
> @@ -147,8 +147,8 @@ __rte_experimental
>  int rte_vhost_async_channel_unregister(int vid, uint16_t queue_id);
>  
>  /**
> - * This function submit enqueue data to async engine. This function has
> - * no guranttee to the transfer completion upon return. Applications
> + * This function submits enqueue data to async engine. This function has
> + * no guarantee to the transfer completion upon return. Applications
>   * should poll transfer status by rte_vhost_poll_enqueue_completed()
>   *
>   * @param vid
> @@ -167,7 +167,7 @@ uint16_t rte_vhost_submit_enqueue_burst(int vid, uint16_t queue_id,
>  		struct rte_mbuf **pkts, uint16_t count);
>  
>  /**
> - * This function check async completion status for a specific vhost
> + * This function checks async completion status for a specific vhost
>   * device queue. Packets which finish copying (enqueue) operation
>   * will be returned in an array.
>   *
> diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
> index fec08b2..0b63940 100644
> --- a/lib/librte_vhost/virtio_net.c
> +++ b/lib/librte_vhost/virtio_net.c
> @@ -1130,8 +1130,11 @@ async_mbuf_to_desc(struct virtio_net *dev, struct vhost_virtqueue *vq,
>  	}
>  
>  out:
> -	async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
> -	async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
> +	if (tlen) {
> +		async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
> +		async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
> +	} else
> +		src_it->count = 0;

Minor comment, you need braces for the 'else' as there are braces for
the 'if'.


I will fix while applying.

Thanks,
Maxime
  
Maxime Coquelin Jan. 11, 2021, 2:04 p.m. UTC | #2
On 1/11/21 12:04 PM, Maxime Coquelin wrote:
> 
> 
> On 1/11/21 1:16 PM, Jiayu Hu wrote:
>> This patch removes unnecessary check and function calls, and it changes
>> appropriate types for internal variables and fixes typos.
>>
>> Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
>> Tested-by: Yinan Wang <yinan.wang@intel.com>
>> ---
>>  lib/librte_vhost/rte_vhost_async.h |  8 ++++----
>>  lib/librte_vhost/virtio_net.c      | 16 ++++++++--------
>>  2 files changed, 12 insertions(+), 12 deletions(-)
>>
>> diff --git a/lib/librte_vhost/rte_vhost_async.h b/lib/librte_vhost/rte_vhost_async.h
>> index c73bd7c..03bd558 100644
>> --- a/lib/librte_vhost/rte_vhost_async.h
>> +++ b/lib/librte_vhost/rte_vhost_async.h
>> @@ -112,7 +112,7 @@ struct rte_vhost_async_features {
>>  };
>>  
>>  /**
>> - * register a async channel for vhost
>> + * register an async channel for vhost
>>   *
>>   * @param vid
>>   *  vhost device id async channel to be attached to
>> @@ -147,8 +147,8 @@ __rte_experimental
>>  int rte_vhost_async_channel_unregister(int vid, uint16_t queue_id);
>>  
>>  /**
>> - * This function submit enqueue data to async engine. This function has
>> - * no guranttee to the transfer completion upon return. Applications
>> + * This function submits enqueue data to async engine. This function has
>> + * no guarantee to the transfer completion upon return. Applications
>>   * should poll transfer status by rte_vhost_poll_enqueue_completed()
>>   *
>>   * @param vid
>> @@ -167,7 +167,7 @@ uint16_t rte_vhost_submit_enqueue_burst(int vid, uint16_t queue_id,
>>  		struct rte_mbuf **pkts, uint16_t count);
>>  
>>  /**
>> - * This function check async completion status for a specific vhost
>> + * This function checks async completion status for a specific vhost
>>   * device queue. Packets which finish copying (enqueue) operation
>>   * will be returned in an array.
>>   *
>> diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
>> index fec08b2..0b63940 100644
>> --- a/lib/librte_vhost/virtio_net.c
>> +++ b/lib/librte_vhost/virtio_net.c
>> @@ -1130,8 +1130,11 @@ async_mbuf_to_desc(struct virtio_net *dev, struct vhost_virtqueue *vq,
>>  	}
>>  
>>  out:
>> -	async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
>> -	async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
>> +	if (tlen) {
>> +		async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
>> +		async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
>> +	} else
>> +		src_it->count = 0;
> 
> Minor comment, you need braces for the 'else' as there are braces for
> the 'if'.
> 
> 
> I will fix while applying.

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

> Thanks,
> Maxime
>
  

Patch

diff --git a/lib/librte_vhost/rte_vhost_async.h b/lib/librte_vhost/rte_vhost_async.h
index c73bd7c..03bd558 100644
--- a/lib/librte_vhost/rte_vhost_async.h
+++ b/lib/librte_vhost/rte_vhost_async.h
@@ -112,7 +112,7 @@  struct rte_vhost_async_features {
 };
 
 /**
- * register a async channel for vhost
+ * register an async channel for vhost
  *
  * @param vid
  *  vhost device id async channel to be attached to
@@ -147,8 +147,8 @@  __rte_experimental
 int rte_vhost_async_channel_unregister(int vid, uint16_t queue_id);
 
 /**
- * This function submit enqueue data to async engine. This function has
- * no guranttee to the transfer completion upon return. Applications
+ * This function submits enqueue data to async engine. This function has
+ * no guarantee to the transfer completion upon return. Applications
  * should poll transfer status by rte_vhost_poll_enqueue_completed()
  *
  * @param vid
@@ -167,7 +167,7 @@  uint16_t rte_vhost_submit_enqueue_burst(int vid, uint16_t queue_id,
 		struct rte_mbuf **pkts, uint16_t count);
 
 /**
- * This function check async completion status for a specific vhost
+ * This function checks async completion status for a specific vhost
  * device queue. Packets which finish copying (enqueue) operation
  * will be returned in an array.
  *
diff --git a/lib/librte_vhost/virtio_net.c b/lib/librte_vhost/virtio_net.c
index fec08b2..0b63940 100644
--- a/lib/librte_vhost/virtio_net.c
+++ b/lib/librte_vhost/virtio_net.c
@@ -1130,8 +1130,11 @@  async_mbuf_to_desc(struct virtio_net *dev, struct vhost_virtqueue *vq,
 	}
 
 out:
-	async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
-	async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
+	if (tlen) {
+		async_fill_iter(src_it, tlen, src_iovec, tvec_idx);
+		async_fill_iter(dst_it, tlen, dst_iovec, tvec_idx);
+	} else
+		src_it->count = 0;
 
 	return error;
 }
@@ -1491,10 +1494,9 @@  virtio_dev_rx_async_submit_split(struct virtio_net *dev,
 	struct rte_vhost_iov_iter *src_it = it_pool;
 	struct rte_vhost_iov_iter *dst_it = it_pool + 1;
 	uint16_t n_free_slot, slot_idx = 0;
-	uint16_t pkt_err = 0;
 	uint16_t segs_await = 0;
 	struct async_inflight_info *pkts_info = vq->async_pkts_info;
-	int n_pkts = 0;
+	uint32_t n_pkts = 0, pkt_err = 0;
 
 	/*
 	 * The ordering between avail index and desc reads need to be enforced.
@@ -1549,11 +1551,9 @@  virtio_dev_rx_async_submit_split(struct virtio_net *dev,
 		/*
 		 * conditions to trigger async device transfer:
 		 * - buffered packet number reaches transfer threshold
-		 * - this is the last packet in the burst enqueue
 		 * - unused async iov number is less than max vhost vector
 		 */
 		if (pkt_burst_idx >= VHOST_ASYNC_BATCH_THRESHOLD ||
-			(pkt_idx == count - 1 && pkt_burst_idx) ||
 			(VHOST_MAX_ASYNC_VEC / 2 - segs_await <
 			BUF_VECTOR_MAX)) {
 			n_pkts = vq->async_ops.transfer_data(dev->vid,
@@ -1565,7 +1565,7 @@  virtio_dev_rx_async_submit_split(struct virtio_net *dev,
 			segs_await = 0;
 			vq->async_pkts_inflight_n += pkt_burst_idx;
 
-			if (unlikely(n_pkts < (int)pkt_burst_idx)) {
+			if (unlikely(n_pkts < pkt_burst_idx)) {
 				/*
 				 * log error packets number here and do actual
 				 * error processing when applications poll
@@ -1585,7 +1585,7 @@  virtio_dev_rx_async_submit_split(struct virtio_net *dev,
 				queue_id, tdes, 0, pkt_burst_idx);
 		vq->async_pkts_inflight_n += pkt_burst_idx;
 
-		if (unlikely(n_pkts < (int)pkt_burst_idx))
+		if (unlikely(n_pkts < pkt_burst_idx))
 			pkt_err = pkt_burst_idx - n_pkts;
 	}