> 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.
I agree. Maybe the comment here make reader a little confused. But the `nfp_pf_secondary_uninit()` does not free any shared resources, it only free two memory which private to each secondary 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? Yes, the system behave properly.