From patchwork Thu Jan 5 10:43:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: nickcooper-zhangtonghao X-Patchwork-Id: 18905 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A4244F8C0; Thu, 5 Jan 2017 11:43:30 +0100 (CET) Received: from smtpbg65.qq.com (smtpbg65.qq.com [103.7.28.233]) by dpdk.org (Postfix) with ESMTP id 4B5D8D59A for ; Thu, 5 Jan 2017 11:43:17 +0100 (CET) X-QQ-mid: bizesmtp2t1483612992tubxe7klg Received: from local.opencloud.tech.localdomai (unknown [106.120.127.11]) by esmtp4.qq.com (ESMTP) with id ; Thu, 05 Jan 2017 18:43:12 +0800 (CST) X-QQ-SSF: 0110000000200070F650B00A0000000 X-QQ-FEAT: y/Yfw/TLgL5QhyRM7ymVJcpcHCjyCKfoeJSUUxbJuwNkvBFoG2Vuq2AqawNvF UVJbVhhyQCqr457MeQ70+tvgKz9n1djAKMVNuVC1yZ8LazOG4EnM7rnFIYHegLlNVKuVJ6I I8yO/UfGlHj/yM8KilWDjXPOy7QTAFqs1S96nb5mREhA2Xw4yhvMDk++c5l5dQD/C7HTxPX Pgdh0pUWcQNyvMi/TeMTICOuzcXBAvj8tF4QBF9Lhgs2N1Oh0lyeOsfh8qHyIJZ5fEPz8aB aeKqm+T7bOJuNS X-QQ-GoodBg: 0 From: nickcooper-zhangtonghao To: dev@dpdk.org Cc: nickcooper-zhangtonghao Date: Thu, 5 Jan 2017 02:43:02 -0800 Message-Id: <1483612983-3545-4-git-send-email-nic@opencloud.tech> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1483612983-3545-1-git-send-email-nic@opencloud.tech> References: <1483612983-3545-1-git-send-email-nic@opencloud.tech> X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 Subject: [dpdk-dev] [PATCH 4/5] vmxnet3: Avoid memory leak in vmxnet3_dev_tx_queue_setup. X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch will check the "nb_desc" parameter for tx queue, release the txq and re-allocation it soon. Signed-off-by: nickcooper-zhangtonghao --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index 9822fa0..077baac 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -828,6 +828,23 @@ return -EINVAL; } + /* Tx vmxnet ring length should be between 512-4096 */ + if (nb_desc < VMXNET3_DEF_TX_RING_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Min: %u", + VMXNET3_DEF_TX_RING_SIZE); + return -EINVAL; + } else if (nb_desc > VMXNET3_TX_RING_MAX_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Max: %u", + VMXNET3_TX_RING_MAX_SIZE); + return -EINVAL; + } + + /* Free memory prior to re-allocation if needed... */ + if (dev->data->tx_queues[queue_idx] != NULL) { + vmxnet3_dev_tx_queue_release(dev->data->tx_queues[queue_idx]); + dev->data->tx_queues[queue_idx] = NULL; + } + txq = rte_zmalloc("ethdev_tx_queue", sizeof(struct vmxnet3_tx_queue), RTE_CACHE_LINE_SIZE); if (txq == NULL) { @@ -846,19 +863,8 @@ comp_ring = &txq->comp_ring; data_ring = &txq->data_ring; - /* Tx vmxnet ring length should be between 512-4096 */ - if (nb_desc < VMXNET3_DEF_TX_RING_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Min: %u", - VMXNET3_DEF_TX_RING_SIZE); - return -EINVAL; - } else if (nb_desc > VMXNET3_TX_RING_MAX_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Max: %u", - VMXNET3_TX_RING_MAX_SIZE); - return -EINVAL; - } else { - ring->size = nb_desc; - ring->size &= ~VMXNET3_RING_SIZE_MASK; - } + ring->size = nb_desc; + ring->size &= ~VMXNET3_RING_SIZE_MASK; comp_ring->size = data_ring->size = ring->size; /* Tx vmxnet rings structure initialization*/