From patchwork Mon Jan 9 02:59:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: nickcooper-zhangtonghao X-Patchwork-Id: 19010 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 2BFA61E2B; Mon, 9 Jan 2017 03:59:49 +0100 (CET) Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) by dpdk.org (Postfix) with ESMTP id 02D04133F for ; Mon, 9 Jan 2017 03:59:46 +0100 (CET) X-QQ-mid: bizesmtp3t1483930782tc8pmddvy Received: from local.opencloud.tech.localdomai (unknown [106.120.127.11]) by esmtp4.qq.com (ESMTP) with id ; Mon, 09 Jan 2017 10:59:36 +0800 (CST) X-QQ-SSF: 01100000002000F0F870000A0000000 X-QQ-FEAT: R3tZgSt770OSUtQh/BiHYiOxqDYOsE2B6vV+csbLFngcz7NRpkKoCKDp9301s j1VLY+aUBh1/gt8wMnXVyO4hrYm3vX5ojXo5DqACIMX8SM6U6el9A2OIDwtg+ymuEGOiyRM 0wvbMpq8Frf57kyjIByJquzf8SyD00KtsSclDChWcoBnGNY8s3D0B0f8z7zpMvR2UU7iQlP 9EUvqPgwowU4jJddKjQnm6ZaUOxZHcXA22rC7qEAxl55mUQw7EU7mIAOe53QC0dguD19/Hw cMghxVaJpiVgvl X-QQ-GoodBg: 0 From: Nick Zhang To: yongwang@vmware.com Cc: ferruh.yigit@intel.com, dev@dpdk.org, Nick Zhang Date: Sun, 8 Jan 2017 18:59:37 -0800 Message-Id: <1483930780-7064-1-git-send-email-nic@opencloud.tech> X-Mailer: git-send-email 1.8.3.1 X-QQ-SENDSIZE: 520 X-QQ-Bgrelay: 1 Subject: [dpdk-dev] [PATCH v3 1/4] vmxnet3: Avoid memory leak in vmxnet3_dev_rx_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 rx queue. Rx vmxnet rings length should be between 128-4096. The patch will release the rxq and re-allocation it soon for different "nb_desc". Signed-off-by: Nick Zhang --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index b109168..e77374f 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -926,6 +926,21 @@ PMD_INIT_FUNC_TRACE(); + /* Rx vmxnet rings length should be between 128-4096 */ + if (nb_desc < VMXNET3_DEF_RX_RING_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Rx Ring Size Min: 128"); + return -EINVAL; + } else if (nb_desc > VMXNET3_RX_RING_MAX_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Rx Ring Size Max: 4096"); + return -EINVAL; + } + + /* Free memory prior to re-allocation if needed. */ + if (dev->data->rx_queues[queue_idx] != NULL) { + vmxnet3_dev_rx_queue_release(dev->data->rx_queues[queue_idx]); + dev->data->rx_queues[queue_idx] = NULL; + } + rxq = rte_zmalloc("ethdev_rx_queue", sizeof(struct vmxnet3_rx_queue), RTE_CACHE_LINE_SIZE); if (rxq == NULL) { @@ -946,18 +961,9 @@ ring1 = &rxq->cmd_ring[1]; comp_ring = &rxq->comp_ring; - /* Rx vmxnet rings length should be between 256-4096 */ - if (nb_desc < VMXNET3_DEF_RX_RING_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Rx Ring Size Min: 256"); - return -EINVAL; - } else if (nb_desc > VMXNET3_RX_RING_MAX_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Rx Ring Size Max: 4096"); - return -EINVAL; - } else { - ring0->size = nb_desc; - ring0->size &= ~VMXNET3_RING_SIZE_MASK; - ring1->size = ring0->size; - } + ring0->size = nb_desc; + ring0->size &= ~VMXNET3_RING_SIZE_MASK; + ring1->size = ring0->size; comp_ring->size = ring0->size + ring1->size;