mbox series

[00/34] watchdog: Convert to platform remove callback returning void

Message ID 20230303213716.2123717-1-u.kleine-koenig@pengutronix.de (mailing list archive)
Headers show
Series watchdog: Convert to platform remove callback returning void | expand

Message

Uwe Kleine-König March 3, 2023, 9:36 p.m. UTC
Hello,

this patch series adapts the platform drivers below drivers/watchdog to
use the .remove_new() callback. Compared to the traditional .remove()
callback .remove_new() returns no value. This is a good thing because
the driver core doesn't (and cannot) cope for errors during remove. The
only effect of a non-zero return value in .remove() is that the driver
core emits a warning. The device is removed anyhow and an early return
from .remove() usually yields a resource leak. One driver suffering from
this problem (s3c2410) is fixed by the first patch.

By changing the remove callback to return void driver authors cannot
reasonably (but wrongly) assume any more that there happens some kind of
cleanup later.

All watchdog drivers but the above mentioned one returned zero
unconditionally in their remove callback, so they could all be converted
trivially to .remove_new().

Note that this series depends on commit 5c5a7680e67b ("platform: Provide
a remove callback that returns no value") that is already in Linus' tree
but not yet included in a tagged version.

Best regards
Uwe

Uwe Kleine-König (34):
  watchdog: s3c2410: Don't skip cleanup in remove's error path
  watchdog: acquirewdt: Convert to platform remove callback returning void
  watchdog: advantechwdt: Convert to platform remove callback returning void
  watchdog: ar7: Convert to platform remove callback returning void
  watchdog: at91rm9200: Convert to platform remove callback returning void
  watchdog: ath79: Convert to platform remove callback returning void
  watchdog: bcm2835: Convert to platform remove callback returning void
  watchdog: bcm47xx: Convert to platform remove callback returning void
  watchdog: bcm_kona: Convert to platform remove callback returning void
  watchdog: cpwd: Convert to platform remove callback returning void
  watchdog: dw: Convert to platform remove callback returning void
  watchdog: gef: Convert to platform remove callback returning void
  watchdog: geodewdt: Convert to platform remove callback returning void
  watchdog: ib700wdt: Convert to platform remove callback returning void
  watchdog: ie6xx: Convert to platform remove callback returning void
  watchdog: lpc18xx: Convert to platform remove callback returning void
  watchdog: mtx-1: Convert to platform remove callback returning void
  watchdog: nic7018: Convert to platform remove callback returning void
  watchdog: nv_tco: Convert to platform remove callback returning void
  watchdog: omap: Convert to platform remove callback returning void
  watchdog: orion: Convert to platform remove callback returning void
  watchdog: rc32434: Convert to platform remove callback returning void
  watchdog: rdc321x: Convert to platform remove callback returning void
  watchdog: renesas: Convert to platform remove callback returning void
  watchdog: riowd: Convert to platform remove callback returning void
  watchdog: rn5t618: Convert to platform remove callback returning void
  watchdog: rti: Convert to platform remove callback returning void
  watchdog: s3c2410: Convert to platform remove callback returning void
  watchdog: sa1100: Convert to platform remove callback returning void
  watchdog: sch311x: Convert to platform remove callback returning void
  watchdog: shwdt: Convert to platform remove callback returning void
  watchdog: st_lpc: Convert to platform remove callback returning void
  watchdog: stmp3xxx_rtc: Convert to platform remove callback returning void
  watchdog: wm8350: Convert to platform remove callback returning void

 drivers/watchdog/acquirewdt.c       | 6 ++----
 drivers/watchdog/advantechwdt.c     | 6 ++----
 drivers/watchdog/ar7_wdt.c          | 5 ++---
 drivers/watchdog/at91rm9200_wdt.c   | 6 ++----
 drivers/watchdog/ath79_wdt.c        | 5 ++---
 drivers/watchdog/bcm2835_wdt.c      | 6 ++----
 drivers/watchdog/bcm47xx_wdt.c      | 6 ++----
 drivers/watchdog/bcm_kona_wdt.c     | 6 ++----
 drivers/watchdog/cpwd.c             | 6 ++----
 drivers/watchdog/dw_wdt.c           | 6 ++----
 drivers/watchdog/gef_wdt.c          | 6 ++----
 drivers/watchdog/geodewdt.c         | 5 ++---
 drivers/watchdog/ib700wdt.c         | 5 ++---
 drivers/watchdog/ie6xx_wdt.c        | 6 ++----
 drivers/watchdog/lpc18xx_wdt.c      | 6 ++----
 drivers/watchdog/mtx-1_wdt.c        | 5 ++---
 drivers/watchdog/nic7018_wdt.c      | 6 ++----
 drivers/watchdog/nv_tco.c           | 6 ++----
 drivers/watchdog/omap_wdt.c         | 6 ++----
 drivers/watchdog/orion_wdt.c        | 5 ++---
 drivers/watchdog/rc32434_wdt.c      | 5 ++---
 drivers/watchdog/rdc321x_wdt.c      | 6 ++----
 drivers/watchdog/renesas_wdt.c      | 6 ++----
 drivers/watchdog/riowd.c            | 6 ++----
 drivers/watchdog/rn5t618_wdt.c      | 6 ++----
 drivers/watchdog/rti_wdt.c          | 6 ++----
 drivers/watchdog/s3c2410_wdt.c      | 9 ++++-----
 drivers/watchdog/sa1100_wdt.c       | 6 ++----
 drivers/watchdog/sch311x_wdt.c      | 5 ++---
 drivers/watchdog/shwdt.c            | 6 ++----
 drivers/watchdog/st_lpc_wdt.c       | 6 ++----
 drivers/watchdog/stmp3xxx_rtc_wdt.c | 5 ++---
 drivers/watchdog/wm8350_wdt.c       | 5 ++---
 33 files changed, 68 insertions(+), 123 deletions(-)

base-commit: 2eb29d59ddf02e39774abfb60b2030b0b7e27c1f

Comments

Uwe Kleine-König March 6, 2023, 5:05 p.m. UTC | #1
Hello,

[dropping Leela Krishna Amudala from the list of recipents as their
email address bounces]

On Fri, Mar 03, 2023 at 10:36:42PM +0100, Uwe Kleine-König wrote:
> this patch series adapts the platform drivers below drivers/watchdog to
> use the .remove_new() callback. Compared to the traditional .remove()
> callback .remove_new() returns no value. This is a good thing because
> the driver core doesn't (and cannot) cope for errors during remove. The
> only effect of a non-zero return value in .remove() is that the driver
> core emits a warning. The device is removed anyhow and an early return
> from .remove() usually yields a resource leak. One driver suffering from
> this problem (s3c2410) is fixed by the first patch.
> 
> By changing the remove callback to return void driver authors cannot
> reasonably (but wrongly) assume any more that there happens some kind of
> cleanup later.
> 
> All watchdog drivers but the above mentioned one returned zero
> unconditionally in their remove callback, so they could all be converted
> trivially to .remove_new().
> 
> Note that this series depends on commit 5c5a7680e67b ("platform: Provide
> a remove callback that returns no value") that is already in Linus' tree
> but not yet included in a tagged version.

This is fixed now, v6.3-rc1 is suitable as a base for this series.

Guenter pointed out that for some drivers it is possible to make use of
devm_watchdog_register_device() and drop the remove callback completely.
Also there is an alternative series that gets rid of s3c2410's remove
callback.

I'll send out a series converting the three drivers to
devm_watchdog_register_device() as Guenter suggested. To apply the
remainder of this series you might want to do:

	b4 am -l -P 2-7,9-25,27,29-33 20230303213716.2123717-1-u.kleine-koenig@pengutronix.de

Best regards
Uwe
Naresh Kamboju March 14, 2023, 8:38 a.m. UTC | #2
> Hello,
> 
> this patch series adapts the platform drivers below drivers/watchdog to
> use the .remove_new() callback. Compared to the traditional .remove()
> callback .remove_new() returns no value. This is a good thing because
> the driver core doesn't (and cannot) cope for errors during remove. The
> only effect of a non-zero return value in .remove() is that the driver
> core emits a warning. The device is removed anyhow and an early return
> from .remove() usually yields a resource leak. One driver suffering from
> this problem (s3c2410) is fixed by the first patch.

This patch set applied on top of Linux next.

Build tested with gcc-12, clang-16 and clang nightly.
Boot and LTP smoketests performed on
 - qemu-x86_64
 - qemu-arm64
 - fvp-aemva
 - qemu-armv7
 - qemu-i386

Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>

--
Linaro LKFT
https://lkft.linaro.org