DPDK patches and discussions
 help / color / mirror / Atom feed
From: Herbert Guan <herbert.guan@arm.com>
To: dev@dpdk.org, declan.doherty@intel.com, jianbo.liu@linaro.org
Cc: Herbert Guan <herbert.guan@arm.com>
Subject: [dpdk-dev] [PATCH v2] test: Fix memory corruption issues which fails the link_bonding test.
Date: Mon, 10 Jul 2017 19:13:46 +0800	[thread overview]
Message-ID: <1499685226-8659-1-git-send-email-herbert.guan@arm.com> (raw)
In-Reply-To: <1499671222-8283-1-git-send-email-herbert.guan@arm.com>

Patch V2: fix build warnings by deleting unused variables. 

There were double-free problems in some test cases, which will cause
a duplicated mbuf will be added into mempool.  After double-free, 
some new allocated mbuf will hold a same address and thus cause the 
memory corruption.

Another minor issue is that in some test cases, allocated mbuf will
not be released after test case exits.  Hopefully these leaked mbuf
will be released by the next test case in its setup phase when
stopping the virtual pmd ports, while this do is a memory leak of
the exited test case.

To fix above 2 issues, this patch will do:
1) Release virtual pmd ports' tx queue in the clean up function
   remove_slaves_and_stop_bonded_device() of each test cases.
2) Do not release allocated mbufs for test bursts.  These mbufs
   will be released in remove_slaves_and_stop_bonded_device() when
   test case exits.

Signed-off-by: Herbert Guan <herbert.guan@arm.com>
---
 test/test/test_link_bonding.c | 64 ++++++-------------------------------------
 1 file changed, 9 insertions(+), 55 deletions(-)

diff --git a/test/test/test_link_bonding.c b/test/test/test_link_bonding.c
index aa2a1a2..140d864 100644
--- a/test/test/test_link_bonding.c
+++ b/test/test/test_link_bonding.c
@@ -221,6 +221,10 @@ struct rte_fdir_conf fdir_conf = {
 
 };
 
+static void free_virtualpmd_tx_queue(void);
+
+
+
 static int
 configure_ethdev(uint8_t port_id, uint8_t start, uint8_t en_isr)
 {
@@ -684,6 +688,7 @@ struct rte_fdir_conf fdir_conf = {
 remove_slaves_and_stop_bonded_device(void)
 {
 	/* Clean up and remove slaves from bonded device */
+	free_virtualpmd_tx_queue();
 	while (test_params->bonded_slave_count > 0)
 		TEST_ASSERT_SUCCESS(test_remove_slave_from_bonded_device(),
 				"test_remove_slave_from_bonded_device failed");
@@ -1621,9 +1626,6 @@ struct rte_fdir_conf fdir_conf = {
 
 	/* free mbufs */
 	for (i = 0; i < MAX_PKT_BURST; i++) {
-		if (gen_pkt_burst[i] != NULL)
-			rte_pktmbuf_free(gen_pkt_burst[i]);
-
 		if (rx_pkt_burst[i] != NULL)
 			rte_pktmbuf_free(rx_pkt_burst[i]);
 	}
@@ -1970,12 +1972,6 @@ struct rte_fdir_conf fdir_conf = {
 	for (i = 0; i < MAX_PKT_BURST; i++) {
 		if (rx_pkt_burst[i] != NULL)
 			rte_pktmbuf_free(rx_pkt_burst[i]);
-
-		if (gen_pkt_burst[1][i] != NULL)
-			rte_pktmbuf_free(gen_pkt_burst[1][i]);
-
-		if (gen_pkt_burst[3][i] != NULL)
-			rte_pktmbuf_free(gen_pkt_burst[1][i]);
 	}
 
 	/* Clean up and remove slaves from bonded device */
@@ -2414,7 +2410,7 @@ struct rte_fdir_conf fdir_conf = {
 
 	uint8_t slaves[RTE_MAX_ETHPORTS];
 
-	int i, j, burst_size, slave_count, primary_port;
+	int i, burst_size, slave_count, primary_port;
 
 	burst_size = 21;
 
@@ -2547,16 +2543,6 @@ struct rte_fdir_conf fdir_conf = {
 			"(%d) port_stats.opackets not as expected",
 			test_params->slave_port_ids[3]);
 
-	/* free mbufs */
-	for (i = 0; i < TEST_ACTIVE_BACKUP_RX_BURST_SLAVE_COUNT; i++) {
-		for (j = 0; j < MAX_PKT_BURST; j++) {
-			if (pkt_burst[i][j] != NULL) {
-				rte_pktmbuf_free(pkt_burst[i][j]);
-				pkt_burst[i][j] = NULL;
-			}
-		}
-	}
-
 	/* Clean up and remove slaves from bonded device */
 	return remove_slaves_and_stop_bonded_device();
 }
@@ -3318,7 +3304,7 @@ struct rte_fdir_conf fdir_conf = {
 
 	uint8_t slaves[RTE_MAX_ETHPORTS];
 
-	int i, j, burst_size, slave_count;
+	int i, burst_size, slave_count;
 
 	memset(pkt_burst, 0, sizeof(pkt_burst));
 
@@ -3456,16 +3442,6 @@ struct rte_fdir_conf fdir_conf = {
 			test_params->bonded_port_id, (int)port_stats.ipackets,
 			burst_size * 3);
 
-	/* free mbufs allocate for rx testing */
-	for (i = 0; i < TEST_BALANCE_RX_BURST_SLAVE_COUNT; i++) {
-		for (j = 0; j < MAX_PKT_BURST; j++) {
-			if (pkt_burst[i][j] != NULL) {
-				rte_pktmbuf_free(pkt_burst[i][j]);
-				pkt_burst[i][j] = NULL;
-			}
-		}
-	}
-
 	/* Clean up and remove slaves from bonded device */
 	return remove_slaves_and_stop_bonded_device();
 }
@@ -3887,7 +3863,7 @@ struct rte_fdir_conf fdir_conf = {
 
 	uint8_t slaves[RTE_MAX_ETHPORTS];
 
-	int i, j, burst_size, slave_count;
+	int i, burst_size, slave_count;
 
 	memset(pkt_burst, 0, sizeof(pkt_burst));
 
@@ -3984,16 +3960,6 @@ struct rte_fdir_conf fdir_conf = {
 			"(%d) port_stats.ipackets not as expected\n",
 			test_params->bonded_port_id);
 
-	/* free mbufs allocate for rx testing */
-	for (i = 0; i < BROADCAST_LINK_STATUS_NUM_OF_SLAVES; i++) {
-		for (j = 0; j < MAX_PKT_BURST; j++) {
-			if (pkt_burst[i][j] != NULL) {
-				rte_pktmbuf_free(pkt_burst[i][j]);
-				pkt_burst[i][j] = NULL;
-			}
-		}
-	}
-
 	/* Clean up and remove slaves from bonded device */
 	return remove_slaves_and_stop_bonded_device();
 }
@@ -4409,7 +4375,7 @@ struct rte_fdir_conf fdir_conf = {
 
 	uint8_t slaves[RTE_MAX_ETHPORTS];
 
-	int i, j, burst_size, slave_count, primary_port;
+	int i, burst_size, slave_count, primary_port;
 
 	burst_size = 21;
 
@@ -4527,18 +4493,6 @@ struct rte_fdir_conf fdir_conf = {
 			"(%d) port_stats.ipackets not as expected\n",
 			test_params->bonded_port_id);
 
-	/* free mbufs */
-
-	for (i = 0; i < TEST_ADAPTIVE_TRANSMIT_LOAD_BALANCING_RX_BURST_SLAVE_COUNT; i++) {
-		for (j = 0; j < MAX_PKT_BURST; j++) {
-			if (pkt_burst[i][j] != NULL) {
-				rte_pktmbuf_free(pkt_burst[i][j]);
-				pkt_burst[i][j] = NULL;
-			}
-		}
-	}
-
-
 	/* Clean up and remove slaves from bonded device */
 	return remove_slaves_and_stop_bonded_device();
 }
-- 
1.8.3.1

  parent reply	other threads:[~2017-07-10 11:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-10  7:20 [dpdk-dev] [PATCH] " Herbert Guan
2017-07-10  7:55 ` Jianbo Liu
2017-07-10 11:13 ` Herbert Guan [this message]
2017-07-12 10:23   ` [dpdk-dev] [PATCH v2] " Declan Doherty
2017-07-31 15:25     ` Ferruh Yigit
2017-07-18 16:13   ` Ferruh Yigit
2017-07-19  1:54     ` Herbert Guan
2017-07-12  9:59 ` [dpdk-dev] [PATCH] " Declan Doherty
2017-07-12 10:16   ` Declan Doherty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1499685226-8659-1-git-send-email-herbert.guan@arm.com \
    --to=herbert.guan@arm.com \
    --cc=declan.doherty@intel.com \
    --cc=dev@dpdk.org \
    --cc=jianbo.liu@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).