* [PATCH 0/3] soc: avoid module usage in non-modular code @ 2016-11-13 19:02 Paul Gortmaker 2016-11-13 19:03 ` [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular Paul Gortmaker 2016-11-13 19:03 ` [PATCH 3/3] soc: fsl: make guts driver " Paul Gortmaker 0 siblings, 2 replies; 5+ messages in thread From: Paul Gortmaker @ 2016-11-13 19:02 UTC (permalink / raw) To: linux-arm-kernel This series of commits is a part of a larger project to ensure people don't reference modular support functions in non-modular code. Overall there was roughly 5k lines of dead code in the kernel due to this. So far we've fixed several areas, like tty, x86, net, gpio ... and we continue to work on other areas. There are several reasons to not use module support for code that can never be built as a module, but the big ones are: (1) it is easy to accidentally code up unused module_exit and remove code (2) it can be misleading when reading the source, thinking it can be modular when the Makefile and/or Kconfig prohibit it (3) it requires the include of the module.h header file which in turn includes nearly everything else. Two of the changes are essentially source only -- the resuting module will be binary equivalent. Only the FSL driver has unused code in addition to the use of modular macros that get converted. Note the FSL SOC driver just appeared in linux-next and so this series won't apply on Linus' master branch. These commits were applied to linux-next and build tested there. Paul. --- Cc: Alexandre Courbot <gnurou@gmail.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Maxime Ripard <maxime.ripard@free-electrons.com> Cc: Scott Wood <oss@buserror.net> Cc: Stephen Warren <swarren@wwwdotorg.org> Cc: Thierry Reding <thierry.reding@gmail.com> Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: Yangbo Lu <yangbo.lu@nxp.com> Cc: linux-arm-kernel at lists.infradead.org Cc: linuxppc-dev at lists.ozlabs.org Cc: linux-tegra at vger.kernel.org Paul Gortmaker (3): soc: sunxi: make sunxi_sram explicitly non-modular soc: tegra: make fuse-tegra explicitly non-modular soc: fsl: make guts driver explicitly non-modular drivers/soc/fsl/guts.c | 17 ++--------------- drivers/soc/sunxi/sunxi_sram.c | 9 ++------- drivers/soc/tegra/fuse/fuse-tegra.c | 4 ++-- 3 files changed, 6 insertions(+), 24 deletions(-) -- 2.10.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular 2016-11-13 19:02 [PATCH 0/3] soc: avoid module usage in non-modular code Paul Gortmaker @ 2016-11-13 19:03 ` Paul Gortmaker 2016-11-14 8:59 ` Maxime Ripard 2016-11-13 19:03 ` [PATCH 3/3] soc: fsl: make guts driver " Paul Gortmaker 1 sibling, 1 reply; 5+ messages in thread From: Paul Gortmaker @ 2016-11-13 19:03 UTC (permalink / raw) To: linux-arm-kernel The Kconfig currently controlling compilation of this code is: drivers/soc/sunxi/Kconfig:config SUNXI_SRAM drivers/soc/sunxi/Kconfig: bool ...meaning that it currently is not being built as a module by anyone. Lets remove the modular code that is essentially orphaned, so that when reading the driver there is no doubt it is builtin-only. Since module_platform_driver() uses the same init level priority as builtin_platform_driver() the init ordering remains unchanged with this commit. Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code. We also delete the MODULE_LICENSE tag etc. since all that information is already contained at the top of the file in the comments. Cc: Maxime Ripard <maxime.ripard@free-electrons.com> Cc: linux-arm-kernel at lists.infradead.org Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> --- drivers/soc/sunxi/sunxi_sram.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/drivers/soc/sunxi/sunxi_sram.c b/drivers/soc/sunxi/sunxi_sram.c index 99e354c8f53f..5e10408a2aef 100644 --- a/drivers/soc/sunxi/sunxi_sram.c +++ b/drivers/soc/sunxi/sunxi_sram.c @@ -12,7 +12,7 @@ #include <linux/debugfs.h> #include <linux/io.h> -#include <linux/module.h> +#include <linux/init.h> #include <linux/of.h> #include <linux/of_address.h> #include <linux/of_device.h> @@ -269,7 +269,6 @@ static const struct of_device_id sunxi_sram_dt_match[] = { { .compatible = "allwinner,sun4i-a10-sram-controller" }, { }, }; -MODULE_DEVICE_TABLE(of, sunxi_sram_dt_match); static struct platform_driver sunxi_sram_driver = { .driver = { @@ -278,8 +277,4 @@ static struct platform_driver sunxi_sram_driver = { }, .probe = sunxi_sram_probe, }; -module_platform_driver(sunxi_sram_driver); - -MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>"); -MODULE_DESCRIPTION("Allwinner sunXi SRAM Controller Driver"); -MODULE_LICENSE("GPL"); +builtin_platform_driver(sunxi_sram_driver); -- 2.10.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular 2016-11-13 19:03 ` [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular Paul Gortmaker @ 2016-11-14 8:59 ` Maxime Ripard 0 siblings, 0 replies; 5+ messages in thread From: Maxime Ripard @ 2016-11-14 8:59 UTC (permalink / raw) To: linux-arm-kernel On Sun, Nov 13, 2016 at 02:03:00PM -0500, Paul Gortmaker wrote: > The Kconfig currently controlling compilation of this code is: > > drivers/soc/sunxi/Kconfig:config SUNXI_SRAM > drivers/soc/sunxi/Kconfig: bool > > ...meaning that it currently is not being built as a module by anyone. > > Lets remove the modular code that is essentially orphaned, so that > when reading the driver there is no doubt it is builtin-only. > > Since module_platform_driver() uses the same init level priority as > builtin_platform_driver() the init ordering remains unchanged with > this commit. > > Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code. > > We also delete the MODULE_LICENSE tag etc. since all that information > is already contained at the top of the file in the comments. > > Cc: Maxime Ripard <maxime.ripard@free-electrons.com> > Cc: linux-arm-kernel at lists.infradead.org > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Thanks! Maxime -- Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 801 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20161114/be8785c8/attachment.sig> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] soc: fsl: make guts driver explicitly non-modular 2016-11-13 19:02 [PATCH 0/3] soc: avoid module usage in non-modular code Paul Gortmaker 2016-11-13 19:03 ` [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular Paul Gortmaker @ 2016-11-13 19:03 ` Paul Gortmaker 2016-11-15 5:10 ` Scott Wood 1 sibling, 1 reply; 5+ messages in thread From: Paul Gortmaker @ 2016-11-13 19:03 UTC (permalink / raw) To: linux-arm-kernel The Kconfig currently controlling compilation of this code is: drivers/soc/fsl/Kconfig:config FSL_GUTS drivers/soc/fsl/Kconfig: bool ...meaning that it currently is not being built as a module by anyone. Lets remove the modular code that is essentially orphaned, so that when reading the driver there is no doubt it is builtin-only. We explicitly disallow a driver unbind, since that doesn't have a sensible use case anyway, and it allows us to drop the ".remove" code for non-modular drivers. Since the code was already not using module_init, the init ordering remains unchanged with this commit. Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code. Cc: Scott Wood <oss@buserror.net> Cc: Yangbo Lu <yangbo.lu@nxp.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: linuxppc-dev at lists.ozlabs.org Cc: linux-arm-kernel at lists.infradead.org Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> --- drivers/soc/fsl/guts.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/drivers/soc/fsl/guts.c b/drivers/soc/fsl/guts.c index 0ac88263c2d7..b4d2fd9263b2 100644 --- a/drivers/soc/fsl/guts.c +++ b/drivers/soc/fsl/guts.c @@ -11,7 +11,7 @@ #include <linux/io.h> #include <linux/slab.h> -#include <linux/module.h> +#include <linux/init.h> #include <linux/of_fdt.h> #include <linux/sys_soc.h> #include <linux/of_address.h> @@ -180,12 +180,6 @@ static int fsl_guts_probe(struct platform_device *pdev) return 0; } -static int fsl_guts_remove(struct platform_device *dev) -{ - soc_device_unregister(soc_dev); - return 0; -} - /* * Table for matching compatible strings, for device tree * guts node, for Freescale QorIQ SOCs. @@ -212,15 +206,14 @@ static const struct of_device_id fsl_guts_of_match[] = { { .compatible = "fsl,ls2080a-dcfg", }, {} }; -MODULE_DEVICE_TABLE(of, fsl_guts_of_match); static struct platform_driver fsl_guts_driver = { .driver = { .name = "fsl-guts", + .suppress_bind_attrs = true, .of_match_table = fsl_guts_of_match, }, .probe = fsl_guts_probe, - .remove = fsl_guts_remove, }; static int __init fsl_guts_init(void) @@ -228,9 +221,3 @@ static int __init fsl_guts_init(void) return platform_driver_register(&fsl_guts_driver); } core_initcall(fsl_guts_init); - -static void __exit fsl_guts_exit(void) -{ - platform_driver_unregister(&fsl_guts_driver); -} -module_exit(fsl_guts_exit); -- 2.10.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] soc: fsl: make guts driver explicitly non-modular 2016-11-13 19:03 ` [PATCH 3/3] soc: fsl: make guts driver " Paul Gortmaker @ 2016-11-15 5:10 ` Scott Wood 0 siblings, 0 replies; 5+ messages in thread From: Scott Wood @ 2016-11-15 5:10 UTC (permalink / raw) To: linux-arm-kernel On Sun, 2016-11-13 at 14:03 -0500, Paul Gortmaker wrote: > The Kconfig currently controlling compilation of this code is: > > drivers/soc/fsl/Kconfig:config FSL_GUTS > drivers/soc/fsl/Kconfig:????????bool > > ...meaning that it currently is not being built as a module by anyone. > > Lets remove the modular code that is essentially orphaned, so that > when reading the driver there is no doubt it is builtin-only. > > We explicitly disallow a driver unbind, since that doesn't have a > sensible use case anyway, and it allows us to drop the ".remove" > code for non-modular drivers. > > Since the code was already not using module_init, the init ordering > remains unchanged with this commit. > > Also note that MODULE_DEVICE_TABLE is a no-op for non-modular code. > > Cc: Scott Wood <oss@buserror.net> > Cc: Yangbo Lu <yangbo.lu@nxp.com> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Cc: linuxppc-dev at lists.ozlabs.org > Cc: linux-arm-kernel at lists.infradead.org > Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Acked-by: Scott Wood <oss@buserror.net> -Scott ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-11-15 5:10 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-11-13 19:02 [PATCH 0/3] soc: avoid module usage in non-modular code Paul Gortmaker 2016-11-13 19:03 ` [PATCH 1/3] soc: sunxi: make sunxi_sram explicitly non-modular Paul Gortmaker 2016-11-14 8:59 ` Maxime Ripard 2016-11-13 19:03 ` [PATCH 3/3] soc: fsl: make guts driver " Paul Gortmaker 2016-11-15 5:10 ` Scott Wood
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).