[PATCH 1/4] PCI: exynos: Don't put .remove callback in .exit.text section
Alim Akhtar
alim.akhtar at samsung.com
Sun Oct 1 18:38:01 PDT 2023
> -----Original Message-----
> From: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
> Sent: Sunday, October 1, 2023 10:33 PM
> To: Jingoo Han <jingoohan1 at gmail.com>; Lorenzo Pieralisi
> <lpieralisi at kernel.org>; Krzysztof Wilczyński <kw at linux.com>; Bjorn Helgaas
> <bhelgaas at google.com>; Krzysztof Kozlowski
> <krzysztof.kozlowski at linaro.org>; Kukjin Kim <kgene.kim at samsung.com>; Siva
> Reddy Kallam <siva.kallam at samsung.com>; Surendranath Gurivireddy Balla
> <suren.reddy at samsung.com>
> Cc: Rob Herring <robh at kernel.org>; Alim Akhtar <alim.akhtar at samsung.com>;
> linux-pci at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-samsung-
> soc at vger.kernel.org; kernel at 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 at pengutronix.de>
> ---
Thanks!
Reviewed-by: Alim Akhtar <alim.akhtar at 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
More information about the linux-arm-kernel
mailing list