Hi Shuai, On Tue, Feb 11, 2025 at 4:05 PM Shuai Xue <xueshuai@xxxxxxxxxxxxxxxxx> wrote: > > > > 在 2025/2/8 18:40, Yunhui Cui 写道: > > Release leaked resources, such as plat_dev and dev_info. > > > > Signed-off-by: Yunhui Cui <cuiyunhui@xxxxxxxxxxxxx> > > --- > > drivers/perf/dwc_pcie_pmu.c | 33 ++++++++++++++++++++++----------- > > 1 file changed, 22 insertions(+), 11 deletions(-) > > > > diff --git a/drivers/perf/dwc_pcie_pmu.c b/drivers/perf/dwc_pcie_pmu.c > > index cccecae9823f..19fa2ba8dd67 100644 > > --- a/drivers/perf/dwc_pcie_pmu.c > > +++ b/drivers/perf/dwc_pcie_pmu.c > > @@ -572,8 +572,10 @@ static int dwc_pcie_register_dev(struct pci_dev *pdev) > > return PTR_ERR(plat_dev); > > > > dev_info = kzalloc(sizeof(*dev_info), GFP_KERNEL); > > - if (!dev_info) > > + if (!dev_info) { > > + platform_device_unregister(plat_dev); > > return -ENOMEM; > > + } > > > > /* Cache platform device to handle pci device hotplug */ > > dev_info->plat_dev = plat_dev; > > @@ -730,6 +732,15 @@ static struct platform_driver dwc_pcie_pmu_driver = { > > .driver = {.name = "dwc_pcie_pmu",}, > > }; > > > > +static void dwc_pcie_cleanup_devices(void) > > +{ > > + struct dwc_pcie_dev_info *dev_info, *tmp; > > + > > + list_for_each_entry_safe(dev_info, tmp, &dwc_pcie_dev_info_head, dev_node) { > > + dwc_pcie_unregister_dev(dev_info); > > + } > > +} > > + > > static int __init dwc_pcie_pmu_init(void) > > { > > struct pci_dev *pdev = NULL; > > @@ -742,7 +753,7 @@ static int __init dwc_pcie_pmu_init(void) > > ret = dwc_pcie_register_dev(pdev); > > if (ret) { > > pci_dev_put(pdev); > > Should we get a reference count of pdev in dwc_pcie_register_dev and put it in > dwc_pcie_unregister_dev? Personally, it's not an issue because RP devices are generally not unloaded. > > Thanks. > Shuai > Thanks, Yunhui