From: Sagar Abhang <sabhang@brocade.com>
To: <mtetsuyah@gmail.com>, <yuanhan.liu@linux.intel.com>
Cc: <dev@dpdk.org>, Sagar Abhang <sabhang@brocade.com>
Subject: [dpdk-dev] [PATCH] net/vhost: move device stop call in close function
Date: Fri, 31 Mar 2017 15:47:10 -0700 [thread overview]
Message-ID: <1491000430-9884-1-git-send-email-sabhang@brocade.com> (raw)
Moved the call to "eth_dev_stop" inside "eth_dev_close" because
"rte_eth_dev_close" calls 'close' operation of device, and in existing
code the close was happening without 'stop' operation for vhost device.
Moved code to free rx and tx queues inside "eth_dev_close" because the
"rte_eth_dev_close" function calls the vhost's "eth_dev_close" function
In that case, the memory allocated for the queues is not freed up
before we free the pointer of rx and tx queues causing memory leak.
Signed-off-by: Sagar Abhang <sabhang@brocade.com>
---
drivers/net/vhost/rte_eth_vhost.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 7f5cd7e..100d1cf 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -832,11 +832,14 @@ eth_dev_close(struct rte_eth_dev *dev)
{
struct pmd_internal *internal;
struct internal_list *list;
+ unsigned int i;
internal = dev->data->dev_private;
if (!internal)
return;
+ eth_dev_stop(dev);
+
rte_vhost_driver_unregister(internal->iface_name);
list = find_internal_resource(internal->iface_name);
@@ -848,9 +851,17 @@ eth_dev_close(struct rte_eth_dev *dev)
pthread_mutex_unlock(&internal_list_lock);
rte_free(list);
+ for (i = 0; i < dev->data->nb_rx_queues; i++)
+ rte_free(dev->data->rx_queues[i]);
+ for (i = 0; i < dev->data->nb_tx_queues; i++)
+ rte_free(dev->data->tx_queues[i]);
+
+ rte_free(dev->data->mac_addrs);
free(internal->dev_name);
free(internal->iface_name);
rte_free(internal);
+
+ dev->data->dev_private = NULL;
}
static int
@@ -1259,7 +1270,6 @@ static int
rte_pmd_vhost_remove(const char *name)
{
struct rte_eth_dev *eth_dev = NULL;
- unsigned int i;
RTE_LOG(INFO, PMD, "Un-Initializing pmd_vhost for %s\n", name);
@@ -1268,8 +1278,6 @@ rte_pmd_vhost_remove(const char *name)
if (eth_dev == NULL)
return -ENODEV;
- eth_dev_stop(eth_dev);
-
eth_dev_close(eth_dev);
if (rte_atomic16_sub_return(&nb_started_ports, 1) == 0)
@@ -1278,12 +1286,6 @@ rte_pmd_vhost_remove(const char *name)
rte_free(vring_states[eth_dev->data->port_id]);
vring_states[eth_dev->data->port_id] = NULL;
- for (i = 0; i < eth_dev->data->nb_rx_queues; i++)
- rte_free(eth_dev->data->rx_queues[i]);
- for (i = 0; i < eth_dev->data->nb_tx_queues; i++)
- rte_free(eth_dev->data->tx_queues[i]);
-
- rte_free(eth_dev->data->mac_addrs);
rte_free(eth_dev->data);
rte_eth_dev_release_port(eth_dev);
--
2.1.4
next reply other threads:[~2017-03-31 22:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-31 22:47 Sagar Abhang [this message]
2017-04-06 5:51 ` Yuanhan Liu
2017-04-07 0:26 ` [dpdk-dev] [PATCH v2] net/vhost: stop dev in close and address mem leak Sagar Abhang
2017-04-13 1:45 ` Yuanhan Liu
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=1491000430-9884-1-git-send-email-sabhang@brocade.com \
--to=sabhang@brocade.com \
--cc=dev@dpdk.org \
--cc=mtetsuyah@gmail.com \
--cc=yuanhan.liu@linux.intel.com \
/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).