DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length
@ 2020-10-15  5:46 Marvin Liu
  2020-10-15 10:48 ` Maxime Coquelin
  2020-10-15 15:40 ` Maxime Coquelin
  0 siblings, 2 replies; 3+ messages in thread
From: Marvin Liu @ 2020-10-15  5:46 UTC (permalink / raw)
  To: maxime.coquelin, chenbo.xia, zhihong.wang; +Cc: dev, Marvin Liu, stable

When transmitting indirect descriptors, first desc will store net_hdr
and following descs will be mapped to mbuf segments. Total desc number
will be seg_num plus one. Meaning of variable needed is the number of
used descs in packed ring. This value will always be two for indirect
desc. Now use mbuf segments number for calculating correct desc length.

Fixes: de8b3d238074 ("net/virtio: fix indirect descs in packed datapaths")
Cc: stable@dpdk.org

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
index 8c8ab9889..42c4c9882 100644
--- a/drivers/net/virtio/virtqueue.h
+++ b/drivers/net/virtio/virtqueue.h
@@ -698,6 +698,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
 	struct virtio_net_hdr *hdr;
 	uint16_t prev;
 	bool prepend_header = false;
+	uint16_t seg_num = cookie->nb_segs;
 
 	id = in_order ? vq->vq_avail_idx : vq->vq_desc_head_idx;
 
@@ -732,7 +733,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
 		 */
 		start_dp[idx].addr  = txvq->virtio_net_hdr_mem +
 			RTE_PTR_DIFF(&txr[idx].tx_packed_indir, txr);
-		start_dp[idx].len   = (needed + 1) *
+		start_dp[idx].len   = (seg_num + 1) *
 			sizeof(struct vring_packed_desc);
 		/* reset flags for indirect desc */
 		head_flags = VRING_DESC_F_INDIRECT;
-- 
2.17.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length
  2020-10-15  5:46 [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length Marvin Liu
@ 2020-10-15 10:48 ` Maxime Coquelin
  2020-10-15 15:40 ` Maxime Coquelin
  1 sibling, 0 replies; 3+ messages in thread
From: Maxime Coquelin @ 2020-10-15 10:48 UTC (permalink / raw)
  To: Marvin Liu, chenbo.xia, zhihong.wang; +Cc: dev, stable



On 10/15/20 7:46 AM, Marvin Liu wrote:
> When transmitting indirect descriptors, first desc will store net_hdr
> and following descs will be mapped to mbuf segments. Total desc number
> will be seg_num plus one. Meaning of variable needed is the number of
> used descs in packed ring. This value will always be two for indirect
> desc. Now use mbuf segments number for calculating correct desc length.
> 
> Fixes: de8b3d238074 ("net/virtio: fix indirect descs in packed datapaths")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Marvin Liu <yong.liu@intel.com>
> 
> diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
> index 8c8ab9889..42c4c9882 100644
> --- a/drivers/net/virtio/virtqueue.h
> +++ b/drivers/net/virtio/virtqueue.h
> @@ -698,6 +698,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
>  	struct virtio_net_hdr *hdr;
>  	uint16_t prev;
>  	bool prepend_header = false;
> +	uint16_t seg_num = cookie->nb_segs;
>  
>  	id = in_order ? vq->vq_avail_idx : vq->vq_desc_head_idx;
>  
> @@ -732,7 +733,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
>  		 */
>  		start_dp[idx].addr  = txvq->virtio_net_hdr_mem +
>  			RTE_PTR_DIFF(&txr[idx].tx_packed_indir, txr);
> -		start_dp[idx].len   = (needed + 1) *
> +		start_dp[idx].len   = (seg_num + 1) *
>  			sizeof(struct vring_packed_desc);
>  		/* reset flags for indirect desc */
>  		head_flags = VRING_DESC_F_INDIRECT;
> 

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

Thanks,
Maxime


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length
  2020-10-15  5:46 [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length Marvin Liu
  2020-10-15 10:48 ` Maxime Coquelin
@ 2020-10-15 15:40 ` Maxime Coquelin
  1 sibling, 0 replies; 3+ messages in thread
From: Maxime Coquelin @ 2020-10-15 15:40 UTC (permalink / raw)
  To: Marvin Liu, chenbo.xia, zhihong.wang; +Cc: dev, stable



On 10/15/20 7:46 AM, Marvin Liu wrote:
> When transmitting indirect descriptors, first desc will store net_hdr
> and following descs will be mapped to mbuf segments. Total desc number
> will be seg_num plus one. Meaning of variable needed is the number of
> used descs in packed ring. This value will always be two for indirect
> desc. Now use mbuf segments number for calculating correct desc length.
> 
> Fixes: de8b3d238074 ("net/virtio: fix indirect descs in packed datapaths")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Marvin Liu <yong.liu@intel.com>
> 
> diff --git a/drivers/net/virtio/virtqueue.h b/drivers/net/virtio/virtqueue.h
> index 8c8ab9889..42c4c9882 100644
> --- a/drivers/net/virtio/virtqueue.h
> +++ b/drivers/net/virtio/virtqueue.h
> @@ -698,6 +698,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
>  	struct virtio_net_hdr *hdr;
>  	uint16_t prev;
>  	bool prepend_header = false;
> +	uint16_t seg_num = cookie->nb_segs;
>  
>  	id = in_order ? vq->vq_avail_idx : vq->vq_desc_head_idx;
>  
> @@ -732,7 +733,7 @@ virtqueue_enqueue_xmit_packed(struct virtnet_tx *txvq, struct rte_mbuf *cookie,
>  		 */
>  		start_dp[idx].addr  = txvq->virtio_net_hdr_mem +
>  			RTE_PTR_DIFF(&txr[idx].tx_packed_indir, txr);
> -		start_dp[idx].len   = (needed + 1) *
> +		start_dp[idx].len   = (seg_num + 1) *
>  			sizeof(struct vring_packed_desc);
>  		/* reset flags for indirect desc */
>  		head_flags = VRING_DESC_F_INDIRECT;
> 

Applied to dpdk-next-virtio/main.

Thanks,
Maxime


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-10-15 15:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-15  5:46 [dpdk-dev] [PATCH] net/virtio: fix invalid indirect desc length Marvin Liu
2020-10-15 10:48 ` Maxime Coquelin
2020-10-15 15:40 ` Maxime Coquelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).