From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 21A57106A for ; Wed, 16 Nov 2016 03:19:03 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga101.jf.intel.com with ESMTP; 15 Nov 2016 18:18:54 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,497,1473145200"; d="scan'208";a="901870152" Received: from yliu-dev.sh.intel.com (HELO yliu-dev) ([10.239.67.162]) by orsmga003.jf.intel.com with ESMTP; 15 Nov 2016 18:18:54 -0800 Date: Wed, 16 Nov 2016 10:19:51 +0800 From: Yuanhan Liu To: Ajit Khaparde Cc: stable@dpdk.org Message-ID: <20161116021951.GE5048@yliu-dev.sh.intel.com> References: <20161115230629.GA99122@C02PT1RBG8WP.vpn.broadcom.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161115230629.GA99122@C02PT1RBG8WP.vpn.broadcom.net> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] net/bnxt: fix a segfault encountered during PMD exit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Nov 2016 02:19:04 -0000 Hi Ajit, Thanks for the backport. Few minor comments though: - the dev mailing list should not be cc'ed (thus I removed it). - the commit log should not be changed, except an extra line is needed: [ backported from upstream commit 316e412299fde9f8f099ef957aa04dc6c43d02a2 ] You could either send another veresion, or I will handle it (copy & paste the original commit log) for you while apply. Thanks. --yliu On Tue, Nov 15, 2016 at 05:06:29PM -0600, Ajit Khaparde wrote: > This patch fixes segfault encountered during dev_uninit/close routine. > KNI sample app can be used to reproduce the issue. > > backported from upstream commit 316e412 > > Cc: > Signed-off-by: Ajit Khaparde > --- > drivers/net/bnxt/bnxt.h | 1 + > drivers/net/bnxt/bnxt_ethdev.c | 28 ++++++++++++++++++---------- > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h > index df1f771..0e21ace 100644 > --- a/drivers/net/bnxt/bnxt.h > +++ b/drivers/net/bnxt/bnxt.h > @@ -171,6 +171,7 @@ struct bnxt { > > struct bnxt_pf_info pf; > struct bnxt_vf_info vf; > + uint8_t dev_stopped; > }; > > #endif > diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c > index 3795fac..deeb54c 100644 > --- a/drivers/net/bnxt/bnxt_ethdev.c > +++ b/drivers/net/bnxt/bnxt_ethdev.c > @@ -384,6 +384,7 @@ static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) > struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; > int rc; > > + bp->dev_stopped = 0; > rc = bnxt_hwrm_func_reset(bp); > if (rc) { > RTE_LOG(ERR, PMD, "hwrm chip reset failure rc: %x\n", rc); > @@ -427,16 +428,6 @@ static int bnxt_dev_set_link_down_op(struct rte_eth_dev *eth_dev) > return 0; > } > > -static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) > -{ > - struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; > - > - bnxt_free_tx_mbufs(bp); > - bnxt_free_rx_mbufs(bp); > - bnxt_free_mem(bp); > - rte_free(eth_dev->data->mac_addrs); > -} > - > /* Unload the driver, release resources */ > static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) > { > @@ -449,6 +440,19 @@ static void bnxt_dev_stop_op(struct rte_eth_dev *eth_dev) > bnxt_shutdown_nic(bp); > } > > +static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) > +{ > + struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; > + > + if (bp->dev_stopped == 0) > + bnxt_dev_stop_op(eth_dev); > + > + bnxt_free_tx_mbufs(bp); > + bnxt_free_rx_mbufs(bp); > + bnxt_free_mem(bp); > + rte_free(eth_dev->data->mac_addrs); > +} > + > static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev, > uint32_t index) > { > @@ -1021,6 +1025,8 @@ bnxt_dev_init(struct rte_eth_dev *eth_dev) > eth_dev->pci_dev->mem_resource[0].phys_addr, > eth_dev->pci_dev->mem_resource[0].addr); > > + bp->dev_stopped = 0; > + > return 0; > > error_free: > @@ -1040,6 +1046,8 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) { > rte_free(bp->grp_info); > rc = bnxt_hwrm_func_driver_unregister(bp, 0); > bnxt_free_hwrm_resources(bp); > + if (bp->dev_stopped == 0) > + bnxt_dev_close_op(eth_dev); > return rc; > } > > -- > 2.8.4 (Apple Git-73)