On 11/30/2023 8:52 AM, Chaoyong He wrote: > Fix the resource leak problem in the exit logic of CoreNIC firmware. > > Fixes: 646ea79ce481 ("net/nfp: move PF functions into its own file") > Cc: sta...@dpdk.org > > Signed-off-by: Chaoyong He <chaoyong...@corigine.com> > Reviewed-by: Long Wu <long...@corigine.com> > Reviewed-by: Peng Zhang <peng.zh...@corigine.com>
<...> > +static int > +nfp_pf_secondary_uninit(struct nfp_pf_dev *pf_dev) > +{ > + free(pf_dev->sym_tbl); > + rte_free(pf_dev); > + > + return 0; > +} > + > /* Reset and stop device. The device can not be restarted. */ > static int > nfp_net_close(struct rte_eth_dev *dev) > @@ -333,14 +381,25 @@ nfp_net_close(struct rte_eth_dev *dev) > struct rte_pci_device *pci_dev; > struct nfp_app_fw_nic *app_fw_nic; > > - if (rte_eal_process_type() != RTE_PROC_PRIMARY) > - return 0; > - > hw = dev->data->dev_private; > pf_dev = hw->pf_dev; > pci_dev = RTE_ETH_DEV_TO_PCI(dev); > app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); > > + /* > + * In secondary process, a released eth device can be found by its name > + * in shared memory. > + * If the state of the eth device is RTE_ETH_DEV_UNUSED, it means the > + * eth device has been released. > + */ > + if (rte_eal_process_type() == RTE_PROC_SECONDARY) { > + if (dev->state == RTE_ETH_DEV_UNUSED) > + return 0; > + > + nfp_pf_secondary_uninit(pf_dev); > + return 0; > + } > + > Mostly expectation is secondary process doesn't free shared resources, but init and free done by primary process. When there are multiple secondaries active, and if one of them closes the port, will system behave properly? Can you please double check above logic?