Message ID | 20231001170254.2506508-1-u.kleine-koenig@pengutronix.de |
---|---|
Headers | show |
Series | pci: Fix some section mismatches | expand |
> -----Original Message----- > From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > Sent: Sunday, October 1, 2023 10:33 PM > To: Jingoo Han <jingoohan1@gmail.com>; Lorenzo Pieralisi > <lpieralisi@kernel.org>; Krzysztof Wilczyński <kw@linux.com>; Bjorn Helgaas > <bhelgaas@google.com>; Krzysztof Kozlowski > <krzysztof.kozlowski@linaro.org>; Kukjin Kim <kgene.kim@samsung.com>; Siva > Reddy Kallam <siva.kallam@samsung.com>; Surendranath Gurivireddy Balla > <suren.reddy@samsung.com> > Cc: Rob Herring <robh@kernel.org>; Alim Akhtar <alim.akhtar@samsung.com>; > linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-samsung- > soc@vger.kernel.org; kernel@pengutronix.de > 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@pengutronix.de> > --- Thanks! Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> > 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
On Sun, Oct 01, 2023 at 07:02:50PM +0200, Uwe Kleine-König wrote: > Hello, > > modpost checks about section mismatches are about to get stronger, see > https://lore.kernel.org/linux-kbuild/20230930165204.2478282-1-u.kleine-koenig@pengutronix.de > . > > With the above patch applied, enabling the exynos and kirin drivers as > modules result in a warning about their remove functions that is fixed > here. The keystone driver is a bit special as it can only be enabled > built-in and used __refdata on its driver struct. It also had a similar > issue for .probe fixed in the last patch. > > IMHO all four patches qualify for backporting to stable. I added stable tags and applied to pci/enumeration for v6.7, thanks! > Uwe Kleine-König (4): > PCI: exynos: Don't put .remove callback in .exit.text section > PCI: kirin: Don't put .remove callback in .exit.text section > PCI: keystone: Don't put .remove callback in .exit.text section > PCI: keystone: Don't put .probe callback in .init.text section I updated the subjects to be "Don't discard ... callback" to try to give a little more semantic context. > drivers/pci/controller/dwc/pci-exynos.c | 4 ++-- > drivers/pci/controller/dwc/pci-keystone.c | 8 ++++---- > drivers/pci/controller/dwc/pcie-kirin.c | 4 ++-- > 3 files changed, 8 insertions(+), 8 deletions(-) > > base-commit: 6465e260f48790807eef06b583b38ca9789b6072 > -- > 2.40.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel