linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling.
@ 2024-01-14 17:19 Jonathan Cameron
  2024-01-14 17:19 ` [PATCH 01/13] device property: Add cleanup.h based fwnode_handle_put() scope based cleanup Jonathan Cameron
                   ` (13 more replies)
  0 siblings, 14 replies; 24+ messages in thread
From: Jonathan Cameron @ 2024-01-14 17:19 UTC (permalink / raw)
  To: linux-iio, Rafael J . Wysocki, Len Brown, linux-acpi,
	Andy Shevchenko, Greg Kroah-Hartman, Daniel Scally,
	Heikki Krogerus, Sakari Ailus
  Cc: Nuno Sá,
	Cosmin Tanislav, Mihail Chindris, Rasmus Villemoes,
	Tomislav Denis, Marek Vasut, Olivier Moysan, Fabrice Gasnier,
	Lad Prabhakar, Dmitry Baryshkov, Marijn Suijten, Marius Cristea,
	Ibrahim Tilki, Jonathan Cameron

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Chances since RFC.
- Add if (!IS_ERR_OR_NULL(_T)) check as suggested by Andy Shevchenko.
  This may allow the compiler to optimize cases where it can tell that
  this check will fail rather than calling into fwnode_handle_put().

Note I don't have the hardware so this is compile tested only.
Hence I'd appreciate some Tested-by tags if anyone can poke one of the
effected drivers.

I have tested the device tree only version:
https://lore.kernel.org/linux-iio/20231217184648.185236-1-jic23@kernel.org/
which is very similar.

Failing to release the references on early exit from loops over child nodes
and similar are a fairly common source of bugs. The need to explicitly
release the references via fwnode_handle_put() also complicate the code.

The first patch enables

	struct fwnode_handle *child __free(fwnode_handle) = NULL;

	device_for_each_child_node(dev, child) {
		if (err)
			/*
			 * Previously needed a fwnode_handle_put() here,
			 * will now be called automatically as well leave
			 * the scope within which the cleanup is registered
			 */
			return err;
	}

/*
 * The if (!IS_ERR_OR_NULL(_T)) check will fail here as the pointer will be
 * NULL and thus fwnode_handle_put() will not be called. It would be
 * functionally correct to call it with a NULL pointer but that reduces
 * the opportunities for the compiler to optimize out the call.
 */
}

As can be seen by the examples from IIO that follow this can save
a reasonable amount of complexity and boiler plate code, often enabling
additional cleanups in related code such as use of
return dev_err_probe().

Merge wise (assuming everyone is happy), I'd propose an immutable branch
(in IIO or elsewhere) with the first patch on it, so that we can start making
use of this in other areas of the kernel without having to wait too long.

Jonathan Cameron (13):
  device property: Add cleanup.h based fwnode_handle_put() scope based
    cleanup.
  iio: adc: max11410: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: mcp3564: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: qcom-spmi-adc5: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: rzg2l_adc: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: stm32: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: ti-ads1015: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: adc: ti-ads131e08: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: addac: ad74413r: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: dac: ad3552: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: dac: ad5770r: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: dac: ltc2688: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls
  iio: temp: ltc2983: Use __free(fwnode_handle) to replace
    fwnode_handle_put() calls

 drivers/iio/adc/max11410.c        | 26 ++++--------
 drivers/iio/adc/mcp3564.c         | 15 ++++---
 drivers/iio/adc/qcom-spmi-adc5.c  |  6 +--
 drivers/iio/adc/rzg2l_adc.c       | 10 ++---
 drivers/iio/adc/stm32-adc.c       | 62 +++++++++++----------------
 drivers/iio/adc/ti-ads1015.c      |  4 +-
 drivers/iio/adc/ti-ads131e08.c    | 12 ++----
 drivers/iio/addac/ad74413r.c      |  9 +---
 drivers/iio/dac/ad3552r.c         | 50 +++++++++-------------
 drivers/iio/dac/ad5770r.c         | 18 +++-----
 drivers/iio/dac/ltc2688.c         | 23 +++-------
 drivers/iio/temperature/ltc2983.c | 70 ++++++++++---------------------
 include/linux/property.h          |  3 ++
 13 files changed, 105 insertions(+), 203 deletions(-)

-- 
2.43.0


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

end of thread, other threads:[~2024-02-11 18:53 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-14 17:19 [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Jonathan Cameron
2024-01-14 17:19 ` [PATCH 01/13] device property: Add cleanup.h based fwnode_handle_put() scope based cleanup Jonathan Cameron
2024-01-21 12:28   ` Andy Shevchenko
2024-01-21 16:38     ` Jonathan Cameron
2024-01-21 18:06   ` Lukas Wunner
2024-01-21 18:20     ` Lukas Wunner
2024-01-14 17:19 ` [PATCH 02/13] iio: adc: max11410: Use __free(fwnode_handle) to replace fwnode_handle_put() calls Jonathan Cameron
2024-01-14 17:19 ` [PATCH 03/13] iio: adc: mcp3564: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 04/13] iio: adc: qcom-spmi-adc5: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 05/13] iio: adc: rzg2l_adc: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 06/13] iio: adc: stm32: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 07/13] iio: adc: ti-ads1015: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 08/13] iio: adc: ti-ads131e08: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 09/13] iio: addac: ad74413r: " Jonathan Cameron
2024-01-15 10:17   ` Nuno Sá
2024-02-11 18:53     ` Jonathan Cameron
2024-01-14 17:20 ` [PATCH 10/13] iio: dac: ad3552: " Jonathan Cameron
2024-01-15 10:19   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 11/13] iio: dac: ad5770r: " Jonathan Cameron
2024-01-14 17:20 ` [PATCH 12/13] iio: dac: ltc2688: " Jonathan Cameron
2024-01-15 10:26   ` Nuno Sá
2024-01-14 17:20 ` [PATCH 13/13] iio: temp: ltc2983: " Jonathan Cameron
2024-01-15 10:29   ` Nuno Sá
2024-01-21 12:27 ` [PATCH 00/13] device property / IIO: Use cleanup.h magic for fwnode_handle_put() handling Andy Shevchenko

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