Message ID | 1436879459-18400-5-git-send-email-bernard.iremonger@intel.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers |
Return-Path: <dev-bounces@dpdk.org> 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 046C45A0A; Tue, 14 Jul 2015 15:11:13 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 80E0C2E83 for <dev@dpdk.org>; Tue, 14 Jul 2015 15:11:10 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP; 14 Jul 2015 06:11:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,471,1432623600"; d="scan'208";a="764151739" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by orsmga002.jf.intel.com with ESMTP; 14 Jul 2015 06:11:08 -0700 Received: from sivswdev01.ir.intel.com (sivswdev01.ir.intel.com [10.237.217.45]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id t6EDB6CR023879; Tue, 14 Jul 2015 14:11:06 +0100 Received: from sivswdev01.ir.intel.com (localhost [127.0.0.1]) by sivswdev01.ir.intel.com with ESMTP id t6EDB6qI018814; Tue, 14 Jul 2015 14:11:06 +0100 Received: (from bairemon@localhost) by sivswdev01.ir.intel.com with id t6EDB66j018810; Tue, 14 Jul 2015 14:11:06 +0100 From: Bernard Iremonger <bernard.iremonger@intel.com> To: dev@dpdk.org Date: Tue, 14 Jul 2015 14:10:58 +0100 Message-Id: <1436879459-18400-5-git-send-email-bernard.iremonger@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1436879459-18400-1-git-send-email-bernard.iremonger@intel.com> References: <PATCH> <1436879459-18400-1-git-send-email-bernard.iremonger@intel.com> Subject: [dpdk-dev] [PATCH 4/5] virtio: free queue memory in virtio_dev_close() X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK <dev.dpdk.org> List-Unsubscribe: <http://dpdk.org/ml/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://dpdk.org/ml/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <http://dpdk.org/ml/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Commit Message
Iremonger, Bernard
July 14, 2015, 1:10 p.m. UTC
Add function virtio_free_queues() and call from virtio_dev_close()
Use virtio_dev_rx_queue_release() and virtio_dev_tx_queue_release()
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
drivers/net/virtio/virtio_ethdev.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
Comments
On Tue, 14 Jul 2015 14:10:58 +0100 Bernard Iremonger <bernard.iremonger@intel.com> wrote: > static void > +virtio_free_queues(struct rte_eth_dev *dev) > +{ > + unsigned int i; > + > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > + dev->data->rx_queues[i] = NULL; > + } > + dev->data->nb_rx_queues = 0; > + > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > + dev->data->tx_queues[i] = NULL; > + } > + dev->data->nb_tx_queues = 0; > +} > + Where does command queue get freed?
> -----Original Message----- > From: Iremonger, Bernard > Sent: Tuesday, July 14, 2015 9:11 PM > To: dev@dpdk.org > Cc: Ouyang, Changchun; stephen@networkplumber.org; Iremonger, Bernard > Subject: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > Add function virtio_free_queues() and call from virtio_dev_close() Use > virtio_dev_rx_queue_release() and virtio_dev_tx_queue_release() > > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com> > --- > drivers/net/virtio/virtio_ethdev.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/net/virtio/virtio_ethdev.c > b/drivers/net/virtio/virtio_ethdev.c > index b32b3e9..4676ab1 100644 > --- a/drivers/net/virtio/virtio_ethdev.c > +++ b/drivers/net/virtio/virtio_ethdev.c > @@ -438,6 +438,24 @@ virtio_dev_cq_queue_setup(struct rte_eth_dev > *dev, uint16_t vtpci_queue_idx, } > > static void > +virtio_free_queues(struct rte_eth_dev *dev) { > + unsigned int i; > + > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > + dev->data->rx_queues[i] = NULL; > + } > + dev->data->nb_rx_queues = 0; > + > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > + dev->data->tx_queues[i] = NULL; > + } > + dev->data->nb_tx_queues = 0; > +} > + > +static void > virtio_dev_close(struct rte_eth_dev *dev) { > struct virtio_hw *hw = dev->data->dev_private; @@ -451,6 +469,7 > @@ virtio_dev_close(struct rte_eth_dev *dev) > vtpci_reset(hw); > hw->started = 0; > virtio_dev_free_mbufs(dev); > + virtio_free_queues(dev); Validate it with vhost sample or not for this change? > } > > static void > -- > 1.9.1
Hi Ouyang, <snip> > > --- a/drivers/net/virtio/virtio_ethdev.c > > +++ b/drivers/net/virtio/virtio_ethdev.c > > @@ -438,6 +438,24 @@ virtio_dev_cq_queue_setup(struct rte_eth_dev > > *dev, uint16_t vtpci_queue_idx, } > > > > static void > > +virtio_free_queues(struct rte_eth_dev *dev) { > > + unsigned int i; > > + > > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > > + dev->data->rx_queues[i] = NULL; > > + } > > + dev->data->nb_rx_queues = 0; > > + > > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > > + dev->data->tx_queues[i] = NULL; > > + } > > + dev->data->nb_tx_queues = 0; > > +} > > + > > +static void > > virtio_dev_close(struct rte_eth_dev *dev) { > > struct virtio_hw *hw = dev->data->dev_private; @@ -451,6 +469,7 > @@ > > virtio_dev_close(struct rte_eth_dev *dev) > > vtpci_reset(hw); > > hw->started = 0; > > virtio_dev_free_mbufs(dev); > > + virtio_free_queues(dev); > > Validate it with vhost sample or not for this change? I have tested this change with testpmd on a Fedora VM. Regards, Bernard. > > > } > > > > static void > > -- > > 1.9.1
> -----Original Message----- > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > Sent: Tuesday, July 14, 2015 7:28 PM > To: Iremonger, Bernard > Cc: dev@dpdk.org; Ouyang, Changchun > Subject: Re: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > On Tue, 14 Jul 2015 14:10:58 +0100 > Bernard Iremonger <bernard.iremonger@intel.com> wrote: > > > static void > > +virtio_free_queues(struct rte_eth_dev *dev) { > > + unsigned int i; > > + > > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > > + dev->data->rx_queues[i] = NULL; > > + } > > + dev->data->nb_rx_queues = 0; > > + > > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > > + dev->data->tx_queues[i] = NULL; > > + } > > + dev->data->nb_tx_queues = 0; > > +} > > + > > Where does command queue get freed? The command queue is set up in the eth_virtio_dev_init() function and freed in the eth_virtio_dev_uninit() function. Regards, Bernard.
Hi, Bernard > -----Original Message----- > From: Iremonger, Bernard > Sent: Wednesday, July 15, 2015 4:02 PM > To: Ouyang, Changchun; dev@dpdk.org > Cc: Xu, Qian Q; stephen@networkplumber.org > Subject: RE: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > Hi Ouyang, > > <snip> > > > > --- a/drivers/net/virtio/virtio_ethdev.c > > > +++ b/drivers/net/virtio/virtio_ethdev.c > > > @@ -438,6 +438,24 @@ virtio_dev_cq_queue_setup(struct rte_eth_dev > > > *dev, uint16_t vtpci_queue_idx, } > > > > > > static void > > > +virtio_free_queues(struct rte_eth_dev *dev) { > > > + unsigned int i; > > > + > > > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > > > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > > > + dev->data->rx_queues[i] = NULL; > > > + } > > > + dev->data->nb_rx_queues = 0; > > > + > > > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > > > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > > > + dev->data->tx_queues[i] = NULL; > > > + } > > > + dev->data->nb_tx_queues = 0; > > > +} > > > + > > > +static void > > > virtio_dev_close(struct rte_eth_dev *dev) { > > > struct virtio_hw *hw = dev->data->dev_private; @@ -451,6 +469,7 > > @@ > > > virtio_dev_close(struct rte_eth_dev *dev) > > > vtpci_reset(hw); > > > hw->started = 0; > > > virtio_dev_free_mbufs(dev); > > > + virtio_free_queues(dev); > > > > Validate it with vhost sample or not for this change? > > I have tested this change with testpmd on a Fedora VM. I think we should make sure it will not break any current test case for virtio, So before applying it, it needs use vhost sample on host and test the virtio driver on guest. Thanks Changchun
> -----Original Message----- > From: Iremonger, Bernard > Sent: Wednesday, July 15, 2015 4:27 PM > To: Stephen Hemminger > Cc: dev@dpdk.org; Ouyang, Changchun > Subject: RE: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > > -----Original Message----- > > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > > Sent: Tuesday, July 14, 2015 7:28 PM > > To: Iremonger, Bernard > > Cc: dev@dpdk.org; Ouyang, Changchun > > Subject: Re: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > > > On Tue, 14 Jul 2015 14:10:58 +0100 > > Bernard Iremonger <bernard.iremonger@intel.com> wrote: > > > > > static void > > > +virtio_free_queues(struct rte_eth_dev *dev) { > > > + unsigned int i; > > > + > > > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > > > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > > > + dev->data->rx_queues[i] = NULL; > > > + } > > > + dev->data->nb_rx_queues = 0; > > > + > > > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > > > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > > > + dev->data->tx_queues[i] = NULL; > > > + } > > > + dev->data->nb_tx_queues = 0; > > > +} > > > + > > > > Where does command queue get freed? > > The command queue is set up in the eth_virtio_dev_init() function and > freed in the eth_virtio_dev_uninit() function. > Do you mean control vq? > Regards, > > Bernard.
> -----Original Message----- > From: Ouyang, Changchun > Sent: Wednesday, July 15, 2015 9:39 AM > To: Iremonger, Bernard; Stephen Hemminger > Cc: dev@dpdk.org; Ouyang, Changchun > Subject: RE: [PATCH 4/5] virtio: free queue memory in virtio_dev_close() > > > > > -----Original Message----- > > From: Iremonger, Bernard > > Sent: Wednesday, July 15, 2015 4:27 PM > > To: Stephen Hemminger > > Cc: dev@dpdk.org; Ouyang, Changchun > > Subject: RE: [PATCH 4/5] virtio: free queue memory in > > virtio_dev_close() > > > > > -----Original Message----- > > > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > > > Sent: Tuesday, July 14, 2015 7:28 PM > > > To: Iremonger, Bernard > > > Cc: dev@dpdk.org; Ouyang, Changchun > > > Subject: Re: [PATCH 4/5] virtio: free queue memory in > > > virtio_dev_close() > > > > > > On Tue, 14 Jul 2015 14:10:58 +0100 > > > Bernard Iremonger <bernard.iremonger@intel.com> wrote: > > > > > > > static void > > > > +virtio_free_queues(struct rte_eth_dev *dev) { > > > > + unsigned int i; > > > > + > > > > + for (i = 0; i < dev->data->nb_rx_queues; i++) { > > > > + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); > > > > + dev->data->rx_queues[i] = NULL; > > > > + } > > > > + dev->data->nb_rx_queues = 0; > > > > + > > > > + for (i = 0; i < dev->data->nb_tx_queues; i++) { > > > > + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); > > > > + dev->data->tx_queues[i] = NULL; > > > > + } > > > > + dev->data->nb_tx_queues = 0; > > > > +} > > > > + > > > > > > Where does command queue get freed? > > > > The command queue is set up in the eth_virtio_dev_init() function and > > freed in the eth_virtio_dev_uninit() function. > > > > Do you mean control vq? I am referring to hw->cvq. Regards, Bernard.
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index b32b3e9..4676ab1 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -438,6 +438,24 @@ virtio_dev_cq_queue_setup(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx, } static void +virtio_free_queues(struct rte_eth_dev *dev) +{ + unsigned int i; + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + virtio_dev_rx_queue_release(dev->data->rx_queues[i]); + dev->data->rx_queues[i] = NULL; + } + dev->data->nb_rx_queues = 0; + + for (i = 0; i < dev->data->nb_tx_queues; i++) { + virtio_dev_tx_queue_release(dev->data->tx_queues[i]); + dev->data->tx_queues[i] = NULL; + } + dev->data->nb_tx_queues = 0; +} + +static void virtio_dev_close(struct rte_eth_dev *dev) { struct virtio_hw *hw = dev->data->dev_private; @@ -451,6 +469,7 @@ virtio_dev_close(struct rte_eth_dev *dev) vtpci_reset(hw); hw->started = 0; virtio_dev_free_mbufs(dev); + virtio_free_queues(dev); } static void