Hi Manivannan, > From: Manivannan Sadhasivam, Sent: Wednesday, June 22, 2022 5:49 PM > > On Wed, Jun 22, 2022 at 11:50:31AM +0900, Yoshihiro Shimoda wrote: > > Add pci_epc_release() for epc->dev.release and move kfree(epc) > > to the release function. Otherwise, WARN() happened when a PCIe > > endpoint driver is removed. > > So you have mentioned why you are adding the release callback but not justified > the move of kfree() to release callback. > > The commit message should clearly state what the patch does and why. > > You can use something like below: > > Since there is no release callback defined for the PCI EPC device, the below > warning is thrown by driver core when a PCI endpoint driver is removed: > > Device 'e65d0000.pcie-ep' does not have a release() function, it is broken and must be fixed. See > Documentation/core-api/kobject.rst. > WARNING: CPU: 0 PID: 139 at drivers/base/core.c:2232 device_release+0x78/0x8c > > Hence, add the release callback and also move the kfree(epc) from > pci_epc_destroy() so that the epc memory is freed when all references are > dropped. Thank you for your suggestion! This description looks the best to me. > > > > Device 'e65d0000.pcie-ep' does not have a release() function, it is broken and must be fixed. See > Documentation/core-api/kobject.rst. > > WARNING: CPU: 0 PID: 139 at drivers/base/core.c:2232 device_release+0x78/0x8c > > > > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > > With the commit message fixed, > > Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> Thank you! Best regards, Yoshihiro Shimoda > Thanks, > Mani > > > --- > > Changes from v1: > > - Move kfree(epc) to the release function. > > - Revised the commit description. > > > > > > drivers/pci/endpoint/pci-epc-core.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci-epc-core.c > > index 3bc9273d0a08..2542196e8c3d 100644 > > --- a/drivers/pci/endpoint/pci-epc-core.c > > +++ b/drivers/pci/endpoint/pci-epc-core.c > > @@ -724,7 +724,6 @@ void pci_epc_destroy(struct pci_epc *epc) > > { > > pci_ep_cfs_remove_epc_group(epc->group); > > device_unregister(&epc->dev); > > - kfree(epc); > > } > > EXPORT_SYMBOL_GPL(pci_epc_destroy); > > > > @@ -746,6 +745,11 @@ void devm_pci_epc_destroy(struct device *dev, struct pci_epc *epc) > > } > > EXPORT_SYMBOL_GPL(devm_pci_epc_destroy); > > > > +static void pci_epc_release(struct device *dev) > > +{ > > + kfree(to_pci_epc(dev)); > > +} > > + > > /** > > * __pci_epc_create() - create a new endpoint controller (EPC) device > > * @dev: device that is creating the new EPC > > @@ -779,6 +783,7 @@ __pci_epc_create(struct device *dev, const struct pci_epc_ops *ops, > > device_initialize(&epc->dev); > > epc->dev.class = pci_epc_class; > > epc->dev.parent = dev; > > + epc->dev.release = pci_epc_release; > > epc->ops = ops; > > > > ret = dev_set_name(&epc->dev, "%s", dev_name(dev)); > > -- > > 2.25.1 > > > > -- > மணிவண்ணன் சதாசிவம்