Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: davinci: Don't strip remove function when driver is builtin

Using __exit for the remove function results in the remove callback being
discarded with CONFIG_MMC_DAVINCI=y. When such a device gets unbound (e.g.
using sysfs or hotplug), the driver is just removed without the cleanup
being performed. This results in resource leaks. Fix it by compiling in the
remove callback unconditionally.

This also fixes a W=1 modpost warning:

WARNING: modpost: drivers/mmc/host/davinci_mmc: section mismatch in
reference: davinci_mmcsd_driver+0x10 (section: .data) ->
davinci_mmcsd_remove (section: .exit.text)

Fixes: b4cff4549b7a ("DaVinci: MMC: MMC/SD controller driver for DaVinci family")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240324114017.231936-2-u.kleine-koenig@pengutronix.de
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Uwe Kleine-König and committed by
Ulf Hansson
55c421b3 53ab7f7f

+2 -2
+2 -2
drivers/mmc/host/davinci_mmc.c
··· 1337 1337 return ret; 1338 1338 } 1339 1339 1340 - static void __exit davinci_mmcsd_remove(struct platform_device *pdev) 1340 + static void davinci_mmcsd_remove(struct platform_device *pdev) 1341 1341 { 1342 1342 struct mmc_davinci_host *host = platform_get_drvdata(pdev); 1343 1343 ··· 1392 1392 .of_match_table = davinci_mmc_dt_ids, 1393 1393 }, 1394 1394 .probe = davinci_mmcsd_probe, 1395 - .remove_new = __exit_p(davinci_mmcsd_remove), 1395 + .remove_new = davinci_mmcsd_remove, 1396 1396 .id_table = davinci_mmc_devtype, 1397 1397 }; 1398 1398