Skip to content

mfd: demodularization of non-modular drivers

Paul Gortmaker linux-omap lkml 5 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v5 Latest18 patches 7 repliesIn review
  2. v418 patches 14 repliesSuperseded
  3. v318 patches 9 repliesSuperseded
Earlier versions · 2
VersionPostedPatchesRepliesStatus
v222 patches19 repliesSuperseded
v111 patches9 repliesSuperseded

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/18mfd: aat2870-core: Make it explicitly non-modulardrivers/mfd/aat2870-core.c+3 -370 replies
2/18mfd: adp5520: Make it explicitly non-modulardrivers/mfd/adp5520.c+7 -230 replies
3/18mfd: as3711: Make it explicitly non-modulardrivers/mfd/as3711.c+0 -140 replies
4/18mfd: db8500-prcmu: drop unused MODULE_ tags from non-modular codedrivers/mfd/db8500-prcmu.c+4 -60 replies
5/18mfd: htc-i2cpld: Make it explicitly non-modulardrivers/mfd/htc-i2cpld.c+1 -170 replies
6/18mfd: max8925-core: drop unused MODULE_ tags from non-modular codedrivers/mfd/max8925-core.c+1 -60 replies
7/18mfd: rc5t583: Make it explicitly non-modulardrivers/mfd/rc5t583.c+0 -140 replies
8/18mfd: sta2x11: drop unused MODULE_ tags from non-modular codedrivers/mfd/sta2x11-mfd.c+4 -60 replies
9/18mfd: syscon: Make it explicitly non-modulardrivers/mfd/syscon.c+1 -110 replies
10/18mfd: tps65090: Make it explicitly non-modulardrivers/mfd/tps65090.c+5 -250 replies
11/18mfd: tps65910: Make it explicitly non-modulardrivers/mfd/tps65910.c+1 -170 replies
12/18mfd: tps80031: Make it explicitly non-modulardrivers/mfd/tps80031.c+2 -350 replies
13/18mfd: wm831x-spi: Make it explicitly non-modulardrivers/mfd/wm831x-spi.c+2 -221 reply
14/18mfd: wm831x-i2c: Make it explicitly non-modulardrivers/mfd/wm831x-i2c.c+2 -180 replies
15/18mfd: wm831x-core: drop unused module infrastructure from non-modular codedrivers/mfd/wm831x-core.c include/linux/mfd/wm831x/core.h+2 -140 replies
16/18mfd: wm8350-i2c: Make it explicitly non-modulardrivers/mfd/wm8350-i2c.c+1 -230 replies
17/18mfd: wm8350-core: drop unused module infrastructure from non-modular codedrivers/mfd/wm8350-core.c include/linux/mfd/wm8350/core.h+2 -290 replies
18/18mfd: wm8400-core: Make it explicitly non-modulardrivers/mfd/wm8400-core.c+3 -150 replies

Reviews trailers per patch

All 18 patches have a Reviewed-by or Acked-by.

PatchLinus WalleijTony LindgrenMichael HennerichCharles KeepaxLaxman DewanganAlessandro RubiniDavide CiminaghiJin Park
1/18A-b A-b
2/18A-b A-b
3/18A-b
4/18R-b
5/18A-b
6/18A-b
7/18A-b A-b
8/18A-b A-b A-b
9/18A-b
10/18A-b
11/18A-b A-b
12/18A-b A-b
13/18A-b A-b
14/18A-b A-b
15/18A-b
16/18A-b A-b
17/18A-b
18/18A-b A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 8 reviewers.

Read the v5 thread

Cover letter [PATCH v5 00/18] mfd: demodularization of non-modular drivers

[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 <[email protected]>
Cc Arnd Bergmann <[email protected]>
Cc Charles Keepax <[email protected]>
Cc Cory Maccarrone <[email protected]>
Cc Davide Ciminaghi <[email protected]>
Cc Dong Aisheng <[email protected]>
Cc Graeme Gregory <[email protected]>
Cc Guennadi Liakhovetski <[email protected]>
Cc Haojian Zhuang <[email protected]>
Cc Jin Park <[email protected]>
Cc Jorge Eduardo Candelaria <[email protected]>
Cc Laxman Dewangan <[email protected]>
Cc Lee Jones <[email protected]>
Cc Linus Walleij <[email protected]>
Cc Mark Brown <[email protected]>
Cc Mattias Nilsson <[email protected]>
Cc Michael Hennerich <[email protected]>
Cc Tony Lindgren <[email protected]>
Cc Venu Byravarasu <[email protected]>

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(-)
Signature · 1 line
2.7.4