All of lore.kernel.org
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx
@ 2019-06-20  2:34 Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 1/4] net/virtio: fix memory leak in in-order Rx Tiwei Bie
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Tiwei Bie @ 2019-06-20  2:34 UTC (permalink / raw)
  To: maxime.coquelin, zhihong.wang, dev

v2:
- Fix commit log (Maxime);

Tiwei Bie (4):
  net/virtio: fix memory leak in in-order Rx
  net/virtio: fix memory leak in mergeable Rx
  net/virtio: fix memory leak in mergeable packed Rx
  net/virtio: fix packets check in mergeable packed Rx

 drivers/net/virtio/virtio_rxtx.c | 56 +++++++++++++++-----------------
 1 file changed, 26 insertions(+), 30 deletions(-)

-- 
2.17.1


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

* [dpdk-dev] [PATCH v2 1/4] net/virtio: fix memory leak in in-order Rx
  2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
@ 2019-06-20  2:34 ` Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 2/4] net/virtio: fix memory leak in mergeable Rx Tiwei Bie
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Tiwei Bie @ 2019-06-20  2:34 UTC (permalink / raw)
  To: maxime.coquelin, zhihong.wang, dev; +Cc: stable

When there is no enough segments for a packet in in-order
mergeable Rx path, we should free the whole mbuf chain instead
of just recycling the last segment.

Fixes: e5f456a98d3c ("net/virtio: support in-order Rx and Tx")
Cc: stable@dpdk.org

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 drivers/net/virtio/virtio_rxtx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index 1f1178467..bdb3a2f18 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -1555,7 +1555,7 @@ virtio_recv_pkts_inorder(void *rx_queue,
 		} else {
 			PMD_RX_LOG(ERR,
 					"No enough segments for packet.");
-			virtio_discard_rxbuf_inorder(vq, prev);
+			rte_pktmbuf_free(rx_pkts[nb_rx]);
 			rxvq->stats.errors++;
 			break;
 		}
-- 
2.17.1


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

* [dpdk-dev] [PATCH v2 2/4] net/virtio: fix memory leak in mergeable Rx
  2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 1/4] net/virtio: fix memory leak in in-order Rx Tiwei Bie
@ 2019-06-20  2:34 ` Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 3/4] net/virtio: fix memory leak in mergeable packed Rx Tiwei Bie
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Tiwei Bie @ 2019-06-20  2:34 UTC (permalink / raw)
  To: maxime.coquelin, zhihong.wang, dev; +Cc: stable

When there is no enough segments for a packet in mergeable
Rx path, we should free the whole mbuf chain instead of just
recycling the last segment.

Fixes: bcac5aa207f8 ("net/virtio: improve batching in mergeable path")
Cc: stable@dpdk.org

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 drivers/net/virtio/virtio_rxtx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index bdb3a2f18..9cf422ffe 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -1737,7 +1737,7 @@ virtio_recv_mergeable_pkts(void *rx_queue,
 		} else {
 			PMD_RX_LOG(ERR,
 					"No enough segments for packet.");
-			virtio_discard_rxbuf(vq, prev);
+			rte_pktmbuf_free(rx_pkts[nb_rx]);
 			rxvq->stats.errors++;
 			break;
 		}
-- 
2.17.1


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

* [dpdk-dev] [PATCH v2 3/4] net/virtio: fix memory leak in mergeable packed Rx
  2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 1/4] net/virtio: fix memory leak in in-order Rx Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 2/4] net/virtio: fix memory leak in mergeable Rx Tiwei Bie
@ 2019-06-20  2:34 ` Tiwei Bie
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 4/4] net/virtio: fix packets check " Tiwei Bie
  2019-06-20  9:57 ` [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Maxime Coquelin
  4 siblings, 0 replies; 6+ messages in thread
From: Tiwei Bie @ 2019-06-20  2:34 UTC (permalink / raw)
  To: maxime.coquelin, zhihong.wang, dev; +Cc: stable

When there is no enough segments for a packet in mergeable
packed Rx path, we should free the whole mbuf chain instead
of just recycling the last segment.

Fixes: a76290c8f1cf ("net/virtio: implement Rx path for packed queues")
Cc: stable@dpdk.org

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 drivers/net/virtio/virtio_rxtx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index 9cf422ffe..8b75291f5 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -1910,7 +1910,7 @@ virtio_recv_mergeable_pkts_packed(void *rx_queue,
 		} else {
 			PMD_RX_LOG(ERR,
 					"No enough segments for packet.");
-			virtio_discard_rxbuf(vq, prev);
+			rte_pktmbuf_free(rx_pkts[nb_rx]);
 			rxvq->stats.errors++;
 			break;
 		}
-- 
2.17.1


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

* [dpdk-dev] [PATCH v2 4/4] net/virtio: fix packets check in mergeable packed Rx
  2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
                   ` (2 preceding siblings ...)
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 3/4] net/virtio: fix memory leak in mergeable packed Rx Tiwei Bie
@ 2019-06-20  2:34 ` Tiwei Bie
  2019-06-20  9:57 ` [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Maxime Coquelin
  4 siblings, 0 replies; 6+ messages in thread
From: Tiwei Bie @ 2019-06-20  2:34 UTC (permalink / raw)
  To: maxime.coquelin, zhihong.wang, dev; +Cc: stable

We should check the descriptor state instead of vq's internal
free count (i.e. the number of descriptors that we haven't made
available) for the remaining mergeable packets.

Fixes: a76290c8f1cf ("net/virtio: implement Rx path for packed queues")
Cc: stable@dpdk.org

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 drivers/net/virtio/virtio_rxtx.c | 50 +++++++++++++++-----------------
 1 file changed, 23 insertions(+), 27 deletions(-)

diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index 8b75291f5..b5062ff84 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -1882,38 +1882,34 @@ virtio_recv_mergeable_pkts_packed(void *rx_queue,
 	while (seg_res != 0) {
 		uint16_t rcv_cnt = RTE_MIN((uint16_t)seg_res,
 					VIRTIO_MBUF_BURST_SZ);
-		if (likely(vq->vq_free_cnt >= rcv_cnt)) {
-			num = virtqueue_dequeue_burst_rx_packed(vq, rcv_pkts,
-					len, rcv_cnt);
-			uint16_t extra_idx = 0;
+		uint16_t extra_idx = 0;
 
-			rcv_cnt = num;
-
-			while (extra_idx < rcv_cnt) {
-				rxm = rcv_pkts[extra_idx];
-
-				rxm->data_off =
-					RTE_PKTMBUF_HEADROOM - hdr_size;
-				rxm->pkt_len = (uint32_t)(len[extra_idx]);
-				rxm->data_len = (uint16_t)(len[extra_idx]);
-
-				prev->next = rxm;
-				prev = rxm;
-				rx_pkts[nb_rx]->pkt_len += len[extra_idx];
-				extra_idx += 1;
-			}
-			seg_res -= rcv_cnt;
-			if (!seg_res) {
-				virtio_rx_stats_updated(rxvq, rx_pkts[nb_rx]);
-				nb_rx++;
-			}
-		} else {
-			PMD_RX_LOG(ERR,
-					"No enough segments for packet.");
+		rcv_cnt = virtqueue_dequeue_burst_rx_packed(vq, rcv_pkts,
+				len, rcv_cnt);
+		if (unlikely(rcv_cnt == 0)) {
+			PMD_RX_LOG(ERR, "No enough segments for packet.");
 			rte_pktmbuf_free(rx_pkts[nb_rx]);
 			rxvq->stats.errors++;
 			break;
 		}
+
+		while (extra_idx < rcv_cnt) {
+			rxm = rcv_pkts[extra_idx];
+
+			rxm->data_off = RTE_PKTMBUF_HEADROOM - hdr_size;
+			rxm->pkt_len = (uint32_t)(len[extra_idx]);
+			rxm->data_len = (uint16_t)(len[extra_idx]);
+
+			prev->next = rxm;
+			prev = rxm;
+			rx_pkts[nb_rx]->pkt_len += len[extra_idx];
+			extra_idx += 1;
+		}
+		seg_res -= rcv_cnt;
+		if (!seg_res) {
+			virtio_rx_stats_updated(rxvq, rx_pkts[nb_rx]);
+			nb_rx++;
+		}
 	}
 
 	rxvq->stats.packets += nb_rx;
-- 
2.17.1


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

* Re: [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx
  2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
                   ` (3 preceding siblings ...)
  2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 4/4] net/virtio: fix packets check " Tiwei Bie
@ 2019-06-20  9:57 ` Maxime Coquelin
  4 siblings, 0 replies; 6+ messages in thread
From: Maxime Coquelin @ 2019-06-20  9:57 UTC (permalink / raw)
  To: Tiwei Bie, zhihong.wang, dev



On 6/20/19 4:34 AM, Tiwei Bie wrote:
> v2:
> - Fix commit log (Maxime);
> 
> Tiwei Bie (4):
>    net/virtio: fix memory leak in in-order Rx
>    net/virtio: fix memory leak in mergeable Rx
>    net/virtio: fix memory leak in mergeable packed Rx
>    net/virtio: fix packets check in mergeable packed Rx
> 
>   drivers/net/virtio/virtio_rxtx.c | 56 +++++++++++++++-----------------
>   1 file changed, 26 insertions(+), 30 deletions(-)
> 


Applied to dpdk-next-virtio/master.

Thanks,
Maxime

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

end of thread, other threads:[~2019-06-20  9:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-20  2:34 [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Tiwei Bie
2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 1/4] net/virtio: fix memory leak in in-order Rx Tiwei Bie
2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 2/4] net/virtio: fix memory leak in mergeable Rx Tiwei Bie
2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 3/4] net/virtio: fix memory leak in mergeable packed Rx Tiwei Bie
2019-06-20  2:34 ` [dpdk-dev] [PATCH v2 4/4] net/virtio: fix packets check " Tiwei Bie
2019-06-20  9:57 ` [dpdk-dev] [PATCH v2 0/4] Some fixes for mergeable Rx Maxime Coquelin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.