From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id 4BBDD2BA7 for ; Tue, 1 May 2018 12:47:36 +0200 (CEST) Received: by mail-wm0-f68.google.com with SMTP id m70so16842476wma.2 for ; Tue, 01 May 2018 03:47:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0S0E8k9LFV2ZSYJ37p3SUHdZIKwxNoNZ+tsN+AB/s7o=; b=ay9v+qfF2Mij3Tyd2NWgQkBlUrL2FNx/ZYN5S6A2kK7JCOZWB4wbyJ/SxW1vagbnpx rzCI92RA/tHJKHAEqLpS+bVBAYpWOaYkk/NR5vTXPQmWa6zfXjnjgtVfk7fYobBxHdVB xxyvf9h4OwzweUttQlpKLzNVkQZXovCSqrMbO1961ey39XAAZinjRr2QZ+LV3D9rrdIX VQRkFGIlpRoI/1g554+htwZzGfbVk3sUdwMKv0XZ7MFwUwoh16PxtmhSHeHXwn5bVbTp DyKMA0FZiaSxrXWQegsJj6lcMWP8muXi+XRQ1sWLSMqBwtc+9lJ+T0HBTMkvMC7U9jHR SVow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0S0E8k9LFV2ZSYJ37p3SUHdZIKwxNoNZ+tsN+AB/s7o=; b=ZtIgkxRseQod/n3lNKJ9qbc/9s9Vjr3LlQWMCovq65AdzBoiBO/lksXRzrTnFo6v76 5kzppvI+V1NSfa117DZCCTfGDv55AvyJr/MqiqEfJY+O7Ugizu3tN8pG/ASgaXAB53nb u0Z8BYBkK5KxmADzy/LG6aMPe9FbUPbAlwJpmPAY+ufvBZVdyyiOul+B+SVH7Y64jRLY fzaWvVR/DekGxfopjVZsQWB5z/z8eRCYKSc/uMHz/8Va2132cs4Cqv39xJdxlY72cHRb AHgvhSAmGYsGWvhtMJFPOdjp7clW5iy5s4P5/VoJeavfRP4yWIDp627A8KW8vkF7c6ad yXqA== X-Gm-Message-State: ALQs6tDOfafYID3PL3wT85C/8C4JxmlYP7xF9zLkgFA/wGwnhxrNJIXX FKrAI+ZUMl4iQWsG2n+I5bs= X-Google-Smtp-Source: AB8JxZoKE5GQdAVkj5rQ1w6YkqBPx0AdtSuxsy1HeW0cUb/+PmUvgBb2KQkMazQWxeTzhRZD+CRqmQ== X-Received: by 10.28.111.136 with SMTP id c8mr9103663wmi.9.1525171655897; Tue, 01 May 2018 03:47:35 -0700 (PDT) Received: from localhost (slip139-92-244-193.lon.uk.prserv.net. [139.92.244.193]) by smtp.gmail.com with ESMTPSA id z7-v6sm8403116wrg.56.2018.05.01.03.47.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 01 May 2018 03:47:35 -0700 (PDT) From: luca.boccassi@gmail.com To: Ajit Khaparde Cc: dpdk stable Date: Tue, 1 May 2018 11:45:02 +0100 Message-Id: <20180501104509.17238-39-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180501104509.17238-1-luca.boccassi@gmail.com> References: <20180501104509.17238-1-luca.boccassi@gmail.com> Subject: [dpdk-stable] patch 'net/bnxt: avoid freeing memzone multiple times' has been queued to LTS release 16.11.7 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 May 2018 10:47:36 -0000 Hi, FYI, your patch has been queued to LTS release 16.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 05/03/18. So please shout if anyone has objections. Thanks. Luca Boccassi --- >>From 05777b5e744a9ac45f24760aefb4de701fe0010e Mon Sep 17 00:00:00 2001 From: Ajit Khaparde Date: Mon, 16 Apr 2018 18:11:25 -0700 Subject: [PATCH] net/bnxt: avoid freeing memzone multiple times [ upstream commit 23460b4c6a7ab68e2b6d217460684a554f7e78eb ] Since we are storing the mem_zone address for each ring created, we are freeing the same address multiple times. For example the memory zone created for Rx is being freed during Rx ring cleanup, AGG ring cleanup and CQ cleanup. Avoid this by storing the memory zone address in RXQ instead and free it as a part of queue_release dev_op. In the same way do the same for TX queues as well. Fixes: 51c87ebafc7d ("net/bnxt: add Tx queue create/destroy") Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_ring.c | 10 +++++++--- drivers/net/bnxt/bnxt_ring.h | 4 ++-- drivers/net/bnxt/bnxt_rxq.c | 4 +++- drivers/net/bnxt/bnxt_rxq.h | 1 + drivers/net/bnxt/bnxt_txq.c | 4 +++- drivers/net/bnxt/bnxt_txq.h | 1 + 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c index 2bceb4dba..6091a8840 100644 --- a/drivers/net/bnxt/bnxt_ring.c +++ b/drivers/net/bnxt/bnxt_ring.c @@ -54,7 +54,7 @@ void bnxt_free_ring(struct bnxt_ring *ring) memset((char *)*ring->vmem, 0, ring->vmem_size); *ring->vmem = NULL; } - rte_memzone_free((const struct rte_memzone *)ring->mem_zone); + ring->mem_zone = NULL; } /* @@ -91,12 +91,14 @@ int bnxt_init_ring_grps(struct bnxt *bp) * rx bd ring - Only non-zero length if rx_ring_info is not NULL */ int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx, - struct bnxt_tx_ring_info *tx_ring_info, - struct bnxt_rx_ring_info *rx_ring_info, + struct bnxt_tx_queue *txq, + struct bnxt_rx_queue *rxq, struct bnxt_cp_ring_info *cp_ring_info, const char *suffix) { struct bnxt_ring *cp_ring = cp_ring_info->cp_ring_struct; + struct bnxt_rx_ring_info *rx_ring_info = rxq ? rxq->rx_ring : NULL; + struct bnxt_tx_ring_info *tx_ring_info = txq ? txq->tx_ring : NULL; struct bnxt_ring *tx_ring; struct bnxt_ring *rx_ring; struct rte_pci_device *pdev = bp->pdev; @@ -152,6 +154,7 @@ int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx, memset(mz->addr, 0, mz->len); if (tx_ring_info) { + txq->mz = mz; tx_ring = tx_ring_info->tx_ring_struct; tx_ring->bd = ((char *)mz->addr + tx_ring_start); @@ -171,6 +174,7 @@ int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx, } if (rx_ring_info) { + rxq->mz = mz; rx_ring = rx_ring_info->rx_ring_struct; rx_ring->bd = ((char *)mz->addr + rx_ring_start); diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h index 22a56eb13..51fbb5cbb 100644 --- a/drivers/net/bnxt/bnxt_ring.h +++ b/drivers/net/bnxt/bnxt_ring.h @@ -95,8 +95,8 @@ struct bnxt_cp_ring_info; void bnxt_free_ring(struct bnxt_ring *ring); int bnxt_init_ring_grps(struct bnxt *bp); int bnxt_alloc_rings(struct bnxt *bp, uint16_t qidx, - struct bnxt_tx_ring_info *tx_ring_info, - struct bnxt_rx_ring_info *rx_ring_info, + struct bnxt_tx_queue *txq, + struct bnxt_rx_queue *rxq, struct bnxt_cp_ring_info *cp_ring_info, const char *suffix); int bnxt_alloc_hwrm_rings(struct bnxt *bp); diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index cddf17d58..5bdb55bfc 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -256,6 +256,8 @@ void bnxt_rx_queue_release_op(void *rx_queue) bnxt_free_ring(rxq->cp_ring->cp_ring_struct); bnxt_free_rxq_stats(rxq); + rte_memzone_free(rxq->mz); + rxq->mz = NULL; rte_free(rxq); } @@ -306,7 +308,7 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev, eth_dev->data->rx_queues[queue_idx] = rxq; /* Allocate RX ring hardware descriptors */ - if (bnxt_alloc_rings(bp, queue_idx, NULL, rxq->rx_ring, rxq->cp_ring, + if (bnxt_alloc_rings(bp, queue_idx, NULL, rxq, rxq->cp_ring, "rxr")) { RTE_LOG(ERR, PMD, "ring_dma_zone_reserve for rx_ring failed!"); bnxt_rx_queue_release_op(rxq); diff --git a/drivers/net/bnxt/bnxt_rxq.h b/drivers/net/bnxt/bnxt_rxq.h index 955432983..2f8eb8963 100644 --- a/drivers/net/bnxt/bnxt_rxq.h +++ b/drivers/net/bnxt/bnxt_rxq.h @@ -58,6 +58,7 @@ struct bnxt_rx_queue { uint32_t rx_buf_use_size; /* useable size */ struct bnxt_rx_ring_info *rx_ring; struct bnxt_cp_ring_info *cp_ring; + const struct rte_memzone *mz; }; void bnxt_free_rxq_stats(struct bnxt_rx_queue *rxq); diff --git a/drivers/net/bnxt/bnxt_txq.c b/drivers/net/bnxt/bnxt_txq.c index 99dddddfc..0d2cb499f 100644 --- a/drivers/net/bnxt/bnxt_txq.c +++ b/drivers/net/bnxt/bnxt_txq.c @@ -93,6 +93,8 @@ void bnxt_tx_queue_release_op(void *tx_queue) bnxt_free_ring(txq->cp_ring->cp_ring_struct); bnxt_free_txq_stats(txq); + rte_memzone_free(txq->mz); + txq->mz = NULL; rte_free(txq); } @@ -140,7 +142,7 @@ int bnxt_tx_queue_setup_op(struct rte_eth_dev *eth_dev, txq->port_id = eth_dev->data->port_id; /* Allocate TX ring hardware descriptors */ - if (bnxt_alloc_rings(bp, queue_idx, txq->tx_ring, NULL, txq->cp_ring, + if (bnxt_alloc_rings(bp, queue_idx, txq, NULL, txq->cp_ring, "txr")) { RTE_LOG(ERR, PMD, "ring_dma_zone_reserve for tx_ring failed!"); bnxt_tx_queue_release_op(txq); diff --git a/drivers/net/bnxt/bnxt_txq.h b/drivers/net/bnxt/bnxt_txq.h index 16f3a0bdd..8a23f0034 100644 --- a/drivers/net/bnxt/bnxt_txq.h +++ b/drivers/net/bnxt/bnxt_txq.h @@ -61,6 +61,7 @@ struct bnxt_tx_queue { unsigned int cp_nr_rings; struct bnxt_cp_ring_info *cp_ring; + const struct rte_memzone *mz; }; void bnxt_free_txq_stats(struct bnxt_tx_queue *txq); -- 2.14.2