> -----Original Message----- > From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> > Sent: Sunday, October 1, 2023 10:33 PM > To: Jingoo Han <jingoohan1@xxxxxxxxx>; Lorenzo Pieralisi > <lpieralisi@xxxxxxxxxx>; Krzysztof Wilczyński <kw@xxxxxxxxx>; Bjorn Helgaas > <bhelgaas@xxxxxxxxxx>; Krzysztof Kozlowski > <krzysztof.kozlowski@xxxxxxxxxx>; Kukjin Kim <kgene.kim@xxxxxxxxxxx>; Siva > Reddy Kallam <siva.kallam@xxxxxxxxxxx>; Surendranath Gurivireddy Balla > <suren.reddy@xxxxxxxxxxx> > Cc: Rob Herring <robh@xxxxxxxxxx>; Alim Akhtar <alim.akhtar@xxxxxxxxxxx>; > linux-pci@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-samsung- > soc@xxxxxxxxxxxxxxx; kernel@xxxxxxxxxxxxxx > Subject: [PATCH 1/4] PCI: exynos: Don't put .remove callback in .exit.text > section > > With CONFIG_PCI_EXYNOS=y and exynos_pcie_remove() marked with __exit, > the function is discarded from the driver. In this case a bound device can still get > unbound, e.g via sysfs. Then no cleanup code is run resulting in resource leaks or > worse. > > The right thing to do is do always have the remove callback available. > This fixes the following warning by modpost: > > WARNING: modpost: drivers/pci/controller/dwc/pci-exynos: section > mismatch in reference: exynos_pcie_driver+0x8 (section: .data) -> > exynos_pcie_remove (section: .exit.text) > > (with ARCH=x86_64 W=1 allmodconfig). > > Fixes: 340cba6092c2 ("pci: Add PCIe driver for Samsung Exynos") > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> > --- Thanks! Reviewed-by: Alim Akhtar <alim.akhtar@xxxxxxxxxxx> > drivers/pci/controller/dwc/pci-exynos.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pci-exynos.c > b/drivers/pci/controller/dwc/pci-exynos.c > index 6319082301d6..c6bede346932 100644 > --- a/drivers/pci/controller/dwc/pci-exynos.c > +++ b/drivers/pci/controller/dwc/pci-exynos.c > @@ -375,7 +375,7 @@ static int exynos_pcie_probe(struct platform_device > *pdev) > return ret; > } > > -static int __exit exynos_pcie_remove(struct platform_device *pdev) > +static int exynos_pcie_remove(struct platform_device *pdev) > { > struct exynos_pcie *ep = platform_get_drvdata(pdev); > > @@ -431,7 +431,7 @@ static const struct of_device_id > exynos_pcie_of_match[] = { > > static struct platform_driver exynos_pcie_driver = { > .probe = exynos_pcie_probe, > - .remove = __exit_p(exynos_pcie_remove), > + .remove = exynos_pcie_remove, > .driver = { > .name = "exynos-pcie", > .of_match_table = exynos_pcie_of_match, > -- > 2.40.1