linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/18] mfd: demodularization of non-modular drivers
@ 2019-01-13 18:36 Paul Gortmaker
  2019-01-13 18:36 ` [PATCH 01/18] mfd: aat2870-core: Make it explicitly non-modular Paul Gortmaker
                   ` (18 more replies)
  0 siblings, 19 replies; 26+ messages in thread
From: Paul Gortmaker @ 2019-01-13 18:36 UTC (permalink / raw)
  To: Lee Jones
  Cc: linux-kernel, Paul Gortmaker, Alessandro Rubini, Arnd Bergmann,
	Charles Keepax, Cory Maccarrone, Davide Ciminaghi, Dong Aisheng,
	Graeme Gregory, Guennadi Liakhovetski, Haojian Zhuang, Jin Park,
	Jorge Eduardo Candelaria, Laxman Dewangan, Linus Walleij,
	Mark Brown, Mattias Nilsson, Michael Hennerich, Tony Lindgren,
	Venu Byravarasu, linux-omap, patches

[v4 --> v5: add more acks, re-do build tests on newest linux-next after
the 5.0 merge window closed.]

[v3 --> v4: delete now unused exit fcn from wm835x core; add more acks
 now all in chrono order, re-test.]

[v2 --> v3: drop diasemi commits as they will be modularized; delete
 now unused exit fcn from wm831x core; add more acks; re-test.]

[v1 --> v2: add some more commits as requested by Lee (MFD maintainer),
 update the 00/NN text; re-do build and link testing on new linux-next. ]

This group of MFD drivers are all controlled by "bool" Kconfig settings,
but contain various amounts of largely pointless uses of infrastructure
related to modular operations, even though they can't be built modular.

We can easily remove/replace all of it.  We are trying to make driver
code consistent with the Makefiles/Kconfigs that control them.  This
means not using modular functions/macros for drivers that can never be
built as a module.  Some of the downfalls this oversight leads to are:

 (1) it is easy to accidentally write 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, thus adding a lot of CPP overhead.
 (4) it gets copied/replicated into other drivers and spreads quickly.

What we see in current drivers falls into one or more of the following
categories:

1) include of <linux/module.h> when it simply isn't needed

2) Use of MODULE_LICENSE, MODULE_DEVICE_TABLE,  MODULE_AUTHOR etc. 
   macros that are no-ops for non-modular drivers.

3) Creation of a module_exit() function that will be compiled and
   linked in but never actually called for non-modular drivers.

4) Addition of a platform_driver ".remove" function that is bound
   into the struct but will never be called for non-module use cases.

Solution to #1 --> #3 is simple ; we just delete the related code.

The solution to #4 is similar - we delete the ".remove" function and
the binding into the platform_driver struct.  However, since the same
".remove" function could also be triggered by an "unbind" (such as for
pass-through of a device to a guest instance)  - so we also explicitly
disable any unbind for the driver.

The unbind mask allows us to ensure we will see if there was some odd
corner case out there that was relying on it.  Typically it would be a
multi-port ethernet card passing a port through to a guest, so a
sensible use case in MFD drivers seems highly unlikely.  This same
solution has already been used in multiple other mainline subsystems.

Build testing was done on drivers/mfd for allyesconfig on x86_64, ARM
and ARM-64 on a recent linux-next checkout.

Paul.

---

Cc: Alessandro Rubini <rubini@gnudd.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Charles Keepax <ckeepax@opensource.cirrus.com>
Cc: Cory Maccarrone <darkstar6262@gmail.com>
Cc: Davide Ciminaghi <ciminaghi@gnudd.com>
Cc: Dong Aisheng <dong.aisheng@linaro.org>
Cc: Graeme Gregory <gg@slimlogic.co.uk>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
Cc: Jin Park <jinyoungp@nvidia.com>
Cc: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
Cc: Laxman Dewangan <ldewangan@nvidia.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Cc: Michael Hennerich <michael.hennerich@analog.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Venu Byravarasu <vbyravarasu@nvidia.com>
Cc: linux-omap@vger.kernel.org
Cc: patches@opensource.cirrus.com

Paul Gortmaker (18):
  mfd: aat2870-core: Make it explicitly non-modular
  mfd: adp5520: Make it explicitly non-modular
  mfd: as3711: Make it explicitly non-modular
  mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code
  mfd: htc-i2cpld: Make it explicitly non-modular
  mfd: max8925-core: drop unused MODULE_ tags from non-modular code
  mfd: rc5t583: Make it explicitly non-modular
  mfd: sta2x11: drop unused MODULE_ tags from non-modular code
  mfd: syscon: Make it explicitly non-modular
  mfd: tps65090: Make it explicitly non-modular
  mfd: tps65910: Make it explicitly non-modular
  mfd: tps80031: Make it explicitly non-modular
  mfd: wm831x-spi: Make it explicitly non-modular
  mfd: wm831x-i2c: Make it explicitly non-modular
  mfd: wm831x-core: drop unused module infrastructure from non-modular code
  mfd: wm8350-i2c: Make it explicitly non-modular
  mfd: wm8350-core: drop unused module infrastructure from non-modular code
  mfd: wm8400-core: Make it explicitly non-modular

 drivers/mfd/aat2870-core.c      | 40 +++-------------------------------------
 drivers/mfd/adp5520.c           | 30 +++++++-----------------------
 drivers/mfd/as3711.c            | 14 --------------
 drivers/mfd/db8500-prcmu.c      | 10 ++++------
 drivers/mfd/htc-i2cpld.c        | 18 +-----------------
 drivers/mfd/max8925-core.c      |  7 +------
 drivers/mfd/rc5t583.c           | 14 --------------
 drivers/mfd/sta2x11-mfd.c       | 10 ++++------
 drivers/mfd/syscon.c            | 12 +-----------
 drivers/mfd/tps65090.c          | 30 +++++-------------------------
 drivers/mfd/tps65910.c          | 18 +-----------------
 drivers/mfd/tps80031.c          | 37 ++-----------------------------------
 drivers/mfd/wm831x-core.c       | 15 ++-------------
 drivers/mfd/wm831x-i2c.c        | 20 ++------------------
 drivers/mfd/wm831x-spi.c        | 24 ++----------------------
 drivers/mfd/wm8350-core.c       | 30 ++----------------------------
 drivers/mfd/wm8350-i2c.c        | 24 +-----------------------
 drivers/mfd/wm8400-core.c       | 18 +++---------------
 include/linux/mfd/wm831x/core.h |  1 -
 include/linux/mfd/wm8350/core.h |  1 -
 20 files changed, 41 insertions(+), 332 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2019-03-07 16:11 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-13 18:36 [PATCH v5 00/18] mfd: demodularization of non-modular drivers Paul Gortmaker
2019-01-13 18:36 ` [PATCH 01/18] mfd: aat2870-core: Make it explicitly non-modular Paul Gortmaker
2019-01-13 18:36 ` [PATCH 02/18] mfd: adp5520: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 03/18] mfd: as3711: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 04/18] mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2019-01-13 18:36 ` [PATCH 05/18] mfd: htc-i2cpld: Make it explicitly non-modular Paul Gortmaker
2019-01-13 18:36 ` [PATCH 06/18] mfd: max8925-core: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2019-01-13 18:36 ` [PATCH 07/18] mfd: rc5t583: Make it explicitly non-modular Paul Gortmaker
2019-01-13 18:36 ` [PATCH 08/18] mfd: sta2x11: drop unused MODULE_ tags from non-modular code Paul Gortmaker
2019-01-13 18:36 ` [PATCH 09/18] mfd: syscon: Make it explicitly non-modular Paul Gortmaker
2019-01-13 18:36 ` [PATCH 10/18] mfd: tps65090: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 11/18] mfd: tps65910: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 12/18] mfd: tps80031: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 13/18] mfd: wm831x-spi: " Paul Gortmaker
2019-01-14 11:28   ` Charles Keepax
2019-01-13 18:36 ` [PATCH 14/18] mfd: wm831x-i2c: " Paul Gortmaker
2019-01-13 18:36 ` [PATCH 15/18] mfd: wm831x-core: drop unused module infrastructure from non-modular code Paul Gortmaker
2019-01-13 18:36 ` [PATCH 16/18] mfd: wm8350-i2c: Make it explicitly non-modular Paul Gortmaker
2019-01-13 18:36 ` [PATCH 17/18] mfd: wm8350-core: drop unused module infrastructure from non-modular code Paul Gortmaker
2019-01-13 18:36 ` [PATCH 18/18] mfd: wm8400-core: Make it explicitly non-modular Paul Gortmaker
2019-01-16 13:24 ` [PATCH v5 00/18] mfd: demodularization of non-modular drivers Lee Jones
2019-03-06 23:10   ` Pavel Machek
2019-03-07  4:18     ` Paul Gortmaker
2019-03-07  8:25       ` Lee Jones
2019-03-07  8:35         ` Pavel Machek
2019-03-07 16:11           ` Tony Lindgren

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).