Hi, > -----Original Message----- > From: Zhang, Tianfei <tianfei.zh...@intel.com> > Sent: Monday, September 28, 2020 9:40 > To: dev@dpdk.org; Xu, Rosen <rosen...@intel.com>; Huang, Wei > <wei.hu...@intel.com> > Cc: Zhang, Tianfei <tianfei.zh...@intel.com> > Subject: [PATCH v2 2/4] raw/ifpga/base: free resources when destroying > ifpga device > > From: Wei Huang <wei.hu...@intel.com> > > Add two functions to complete the resources free work, one is > ifpga_adapter_destroy(), the other is ifpga_bus_uinit(). > Then call opae_adapter_destroy() in ifpga_rawdev_destroy(). > > Additional modifiction is removing opae_adapter_free() from > ifpga_rawdev_destroy() because opae adapter will be released in > rte_rawdev_pmd_release(). > > Signed-off-by: Wei Huang <wei.hu...@intel.com> > Signed-off-by: Tianfei zhang <tianfei.zh...@intel.com> > --- > drivers/raw/ifpga/base/ifpga_api.c | 12 ++++++++++++ > drivers/raw/ifpga/base/ifpga_enumerate.c | 16 ++++++++++++++++ > drivers/raw/ifpga/base/ifpga_enumerate.h | 1 + > drivers/raw/ifpga/ifpga_rawdev.c | 8 ++++++-- > 4 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/drivers/raw/ifpga/base/ifpga_api.c > b/drivers/raw/ifpga/base/ifpga_api.c > index 6dbd7159e..1ff57fa18 100644 > --- a/drivers/raw/ifpga/base/ifpga_api.c > +++ b/drivers/raw/ifpga/base/ifpga_api.c > @@ -330,8 +330,20 @@ static int ifpga_adapter_enumerate(struct > opae_adapter *adapter) > return -ENOMEM; > } > > +static void ifpga_adapter_destroy(struct opae_adapter *adapter) { > + struct ifpga_fme_hw *fme; > + > + if (adapter && adapter->mgr && adapter->mgr->data) { > + fme = (struct ifpga_fme_hw *)adapter->mgr->data; > + if (fme->parent) > + ifpga_bus_uinit(fme->parent); > + } > +} > + > struct opae_adapter_ops ifpga_adapter_ops = { > .enumerate = ifpga_adapter_enumerate, > + .destroy = ifpga_adapter_destroy, > }; > > /** > diff --git a/drivers/raw/ifpga/base/ifpga_enumerate.c > b/drivers/raw/ifpga/base/ifpga_enumerate.c > index b8846e373..48b8af458 100644 > --- a/drivers/raw/ifpga/base/ifpga_enumerate.c > +++ b/drivers/raw/ifpga/base/ifpga_enumerate.c > @@ -722,3 +722,19 @@ int ifpga_bus_init(struct ifpga_hw *hw) > > return 0; > } > + > +int ifpga_bus_uinit(struct ifpga_hw *hw) { > + int i; > + struct ifpga_port_hw *port; > + > + if (hw) { > + fme_hw_uinit(&hw->fme); > + for (i = 0; i < MAX_FPGA_PORT_NUM; i++) { > + port = &hw->port[i]; > + port_hw_uinit(port); > + } > + } > + > + return 0; > +} > diff --git a/drivers/raw/ifpga/base/ifpga_enumerate.h > b/drivers/raw/ifpga/base/ifpga_enumerate.h > index 14131e320..95ed594cd 100644 > --- a/drivers/raw/ifpga/base/ifpga_enumerate.h > +++ b/drivers/raw/ifpga/base/ifpga_enumerate.h > @@ -6,6 +6,7 @@ > #define _IFPGA_ENUMERATE_H_ > > int ifpga_bus_init(struct ifpga_hw *hw); > +int ifpga_bus_uinit(struct ifpga_hw *hw); > int ifpga_bus_enumerate(struct ifpga_hw *hw); > > #endif /* _IFPGA_ENUMERATE_H_ */ > diff --git a/drivers/raw/ifpga/ifpga_rawdev.c > b/drivers/raw/ifpga/ifpga_rawdev.c > index 374a7ff1d..98b02b5fa 100644 > --- a/drivers/raw/ifpga/ifpga_rawdev.c > +++ b/drivers/raw/ifpga/ifpga_rawdev.c > @@ -1535,6 +1535,7 @@ ifpga_rawdev_destroy(struct rte_pci_device > *pci_dev) > char name[RTE_RAWDEV_NAME_MAX_LEN]; > struct opae_adapter *adapter; > struct opae_manager *mgr; > + struct ifpga_rawdev *dev; > > if (!pci_dev) { > IFPGA_RAWDEV_PMD_ERR("Invalid pci_dev of the device!"); > @@ -1554,6 +1555,9 @@ ifpga_rawdev_destroy(struct rte_pci_device > *pci_dev) > IFPGA_RAWDEV_PMD_ERR("Invalid device name (%s)", > name); > return -EINVAL; > } > + dev = ifpga_rawdev_get(rawdev); > + if (dev) > + dev->rawdev = NULL; > > adapter = ifpga_rawdev_get_priv(rawdev); > if (!adapter) > @@ -1564,11 +1568,11 @@ ifpga_rawdev_destroy(struct rte_pci_device > *pci_dev) > return -ENODEV; > > if (ifpga_unregister_msix_irq(IFPGA_FME_IRQ, 0, > - fme_interrupt_handler, mgr)) > + fme_interrupt_handler, mgr) < 0) > return -EINVAL; > > + opae_adapter_destroy(adapter); > opae_adapter_data_free(adapter->data); > - opae_adapter_free(adapter); > > /* rte_rawdev_close is called by pmd_release */ > ret = rte_rawdev_pmd_release(rawdev); > -- > 2.17.1
Acked-by: Rosen Xu <rosen...@intel.com>