All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] DEV_PM_OPS macros rework v2
@ 2022-01-05 18:29 Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro Paul Cercueil
                   ` (5 more replies)
  0 siblings, 6 replies; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil

Hi,

A V2 of my patchset that tweaks a bit the *_DEV_PM_OPS() macros that
were introduced recently.

Changes since V1:
- Previous patches [2/8], [6/8] and [7/8] were merged together to [2/6]
  to create an atomic patch.
- Remove useless empty line in patch [3/8] (now [3/6])
- Remove the patch that updated the mpu3050 driver, since it wasn't a
  very good example.
- Update the bmp280 pressure sensor driver to use
  EXPORT_RUNTIME_DEV_PM_OPS(), which should be a much better showcase
  than the mpu3050.

Cheers,
-Paul

Paul Cercueil (6):
  PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro
  PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
  PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro
  PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros
  iio: pressure: bmp280: Use new PM macros

 drivers/iio/pressure/bmp280-core.c | 11 ++-----
 drivers/iio/pressure/bmp280-i2c.c  |  2 +-
 drivers/iio/pressure/bmp280-spi.c  |  2 +-
 drivers/mmc/host/jz4740_mmc.c      |  4 +--
 drivers/mmc/host/mxcmmc.c          |  2 +-
 include/linux/pm.h                 | 52 +++++++++++++++++++++---------
 include/linux/pm_runtime.h         | 21 ++++++++++++
 7 files changed, 65 insertions(+), 29 deletions(-)

-- 
2.34.1


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

* [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-07 16:26   ` Ulf Hansson
  2022-01-05 18:29 ` [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro Paul Cercueil
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
	Jonathan Cameron

The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided callbacks
for both runtime PM and system sleep, which is very likely to be a
mistake, as a system sleep can be triggered while a given device is
already PM-suspended, which would cause the suspend callback to be
called twice.

The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
occurences) compared to the number of places where
SET_SYSTEM_SLEEP_PM_OPS() is used with pm_runtime_force_suspend() and
pm_runtime_force_resume(), which makes me think that none of these cases
are actually valid.

As this macro is currently unused, remove it before someone starts to
use it in yet another invalid case.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---

Notes:
    v2: No change

 include/linux/pm.h | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/include/linux/pm.h b/include/linux/pm.h
index e1e9402180b9..31bbaafb06d2 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
 	SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
 }
 
+/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
+#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+const struct dev_pm_ops __maybe_unused name = { \
+	SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+}
+
 /*
  * Use this for defining a set of PM operations to be used in all situations
  * (system suspend, hibernation or runtime PM).
@@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
  * .resume_early(), to the same routines as .runtime_suspend() and
  * .runtime_resume(), respectively (and analogously for hibernation).
  */
-#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
-static const struct dev_pm_ops name = { \
-	SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-	RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
-}
-
-/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
-#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-const struct dev_pm_ops __maybe_unused name = { \
-	SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-}
-
-/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
 #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
 const struct dev_pm_ops __maybe_unused name = { \
 	SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-- 
2.34.1


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

* [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-07 16:26   ` Ulf Hansson
  2022-01-05 18:29 ` [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros Paul Cercueil
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
	Jonathan Cameron

Keep this macro in line with the other ones. This makes it possible to
use them in the cases where the underlying dev_pm_ops structure is
exported.

Restore the "static" qualifier in the two drivers where the
DEFINE_SIMPLE_DEV_PM_OPS macro was used.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---

Notes:
    v2: Merge the driver changes to make the commit atomic

 drivers/mmc/host/jz4740_mmc.c | 4 ++--
 drivers/mmc/host/mxcmmc.c     | 2 +-
 include/linux/pm.h            | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c
index 7693236c946f..7ab1b38a7be5 100644
--- a/drivers/mmc/host/jz4740_mmc.c
+++ b/drivers/mmc/host/jz4740_mmc.c
@@ -1128,8 +1128,8 @@ static int jz4740_mmc_resume(struct device *dev)
 	return pinctrl_select_default_state(dev);
 }
 
-DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
-	jz4740_mmc_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
+				jz4740_mmc_resume);
 
 static struct platform_driver jz4740_mmc_driver = {
 	.probe = jz4740_mmc_probe,
diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
index 98c218bd6669..40b6878bea6c 100644
--- a/drivers/mmc/host/mxcmmc.c
+++ b/drivers/mmc/host/mxcmmc.c
@@ -1210,7 +1210,7 @@ static int mxcmci_resume(struct device *dev)
 	return ret;
 }
 
-DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
 
 static struct platform_driver mxcmci_driver = {
 	.probe		= mxcmci_probe,
diff --git a/include/linux/pm.h b/include/linux/pm.h
index 31bbaafb06d2..389e600df233 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -362,7 +362,7 @@ struct dev_pm_ops {
  * to RAM and hibernation.
  */
 #define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-static const struct dev_pm_ops name = { \
+const struct dev_pm_ops name = { \
 	SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
 }
 
-- 
2.34.1


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

* [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-07 16:33   ` Ulf Hansson
  2022-01-05 18:29 ` [PATCH v2 4/6] PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro Paul Cercueil
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
	Jonathan Cameron

These macros are defined conditionally, according to CONFIG_PM:
- if CONFIG_PM is enabled, these macros resolve to
  DEFINE_SIMPLE_DEV_PM_OPS(), and the dev_pm_ops symbol will be
  exported.

- if CONFIG_PM is disabled, these macros will result in a dummy static
  dev_pm_ops to be created with the __maybe_unused flag. The dev_pm_ops
  will then be discarded by the compiler, along with the provided
  callback functions if they are not used anywhere else.

In the second case, the symbol is not exported, which should be
perfectly fine - users of the symbol should all use the pm_ptr() or
pm_sleep_ptr() macro, so the dev_pm_ops marked as "extern" in the
client's code will never be accessed.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---

Notes:
    v2: Remove useless empty line

 include/linux/pm.h | 32 +++++++++++++++++++++++++++++---
 1 file changed, 29 insertions(+), 3 deletions(-)

diff --git a/include/linux/pm.h b/include/linux/pm.h
index 389e600df233..b82f40e701ab 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -8,6 +8,7 @@
 #ifndef _LINUX_PM_H
 #define _LINUX_PM_H
 
+#include <linux/export.h>
 #include <linux/list.h>
 #include <linux/workqueue.h>
 #include <linux/spinlock.h>
@@ -357,14 +358,39 @@ struct dev_pm_ops {
 #define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
 #endif
 
+#define _DEFINE_DEV_PM_OPS(name, \
+			   suspend_fn, resume_fn, \
+			   runtime_suspend_fn, runtime_resume_fn, idle_fn) \
+const struct dev_pm_ops name = { \
+	SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+	RUNTIME_PM_OPS(runtime_suspend_fn, runtime_resume_fn, idle_fn) \
+}
+
 /*
  * Use this if you want to use the same suspend and resume callbacks for suspend
  * to RAM and hibernation.
  */
 #define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-const struct dev_pm_ops name = { \
-	SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
-}
+	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
+
+#ifdef CONFIG_PM
+#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+			   runtime_resume_fn, idle_fn, sec) \
+	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+			   runtime_resume_fn, idle_fn); \
+	_EXPORT_SYMBOL(name, sec)
+#else
+#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
+			   runtime_resume_fn, idle_fn, sec) \
+static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
+					 resume_fn, runtime_suspend_fn, \
+					 runtime_resume_fn, idle_fn)
+#endif
+
+#define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "")
+#define EXPORT_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
+	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl")
 
 /* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
 #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-- 
2.34.1


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

* [PATCH v2 4/6] PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
                   ` (2 preceding siblings ...)
  2022-01-05 18:29 ` [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 5/6] PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros Paul Cercueil
  5 siblings, 0 replies; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
	Jonathan Cameron

A lot of drivers create a dev_pm_ops struct with the system sleep
suspend/resume callbacks set to pm_runtime_force_suspend() and
pm_runtime_force_resume().

These drivers can now use the DEFINE_RUNTIME_DEV_PM_OPS() macro, which
will use pm_runtime_force_{suspend,resume}() as the system sleep
callbacks, while having the same dead code removal characteristic that
is already provided by DEFINE_SIMPLE_DEV_PM_OPS().

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---

Notes:
    v2: No change

 include/linux/pm.h         |  3 +++
 include/linux/pm_runtime.h | 14 ++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/include/linux/pm.h b/include/linux/pm.h
index b82f40e701ab..43fa4f828a62 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -410,6 +410,9 @@ const struct dev_pm_ops __maybe_unused name = { \
  * suspend and "early" resume callback pointers, .suspend_late() and
  * .resume_early(), to the same routines as .runtime_suspend() and
  * .runtime_resume(), respectively (and analogously for hibernation).
+ *
+ * Deprecated. You most likely don't want this macro. Use
+ * DEFINE_RUNTIME_DEV_PM_OPS() instead.
  */
 #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
 const struct dev_pm_ops __maybe_unused name = { \
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 016de5776b6d..4af454d29281 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -22,6 +22,20 @@
 					    usage_count */
 #define RPM_AUTO		0x08	/* Use autosuspend_delay */
 
+/*
+ * Use this for defining a set of PM operations to be used in all situations
+ * (system suspend, hibernation or runtime PM).
+ *
+ * Note that the behaviour differs from the deprecated UNIVERSAL_DEV_PM_OPS()
+ * macro, which uses the provided callbacks for both runtime PM and system
+ * sleep, while DEFINE_RUNTIME_DEV_PM_OPS() uses pm_runtime_force_suspend()
+ * and pm_runtime_force_resume() for its system sleep callbacks.
+ */
+#define DEFINE_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+	_DEFINE_DEV_PM_OPS(name, pm_runtime_force_suspend, \
+			   pm_runtime_force_resume, suspend_fn, \
+			   resume_fn, idle_fn)
+
 #ifdef CONFIG_PM
 extern struct workqueue_struct *pm_wq;
 
-- 
2.34.1


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

* [PATCH v2 5/6] PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
                   ` (3 preceding siblings ...)
  2022-01-05 18:29 ` [PATCH v2 4/6] PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-05 18:29 ` [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros Paul Cercueil
  5 siblings, 0 replies; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil,
	Jonathan Cameron

Similar to EXPORT[_GPL]_SIMPLE_DEV_PM_OPS, but for users with runtime-PM
suspend/resume callbacks.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---

Notes:
    v2: No change

 include/linux/pm_runtime.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 4af454d29281..a7f862a26c03 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -36,6 +36,13 @@
 			   pm_runtime_force_resume, suspend_fn, \
 			   resume_fn, idle_fn)
 
+#define EXPORT_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
+			   suspend_fn, resume_fn, idle_fn, "")
+#define EXPORT_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
+	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
+			   suspend_fn, resume_fn, idle_fn, "_gpl")
+
 #ifdef CONFIG_PM
 extern struct workqueue_struct *pm_wq;
 
-- 
2.34.1


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

* [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros
  2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
                   ` (4 preceding siblings ...)
  2022-01-05 18:29 ` [PATCH v2 5/6] PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros Paul Cercueil
@ 2022-01-05 18:29 ` Paul Cercueil
  2022-01-06 13:42   ` Jonathan Cameron
  5 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-05 18:29 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: Ulf Hansson, Jonathan Cameron, Lars-Peter Clausen, Linus Walleij,
	Arnd Bergmann, Len Brown, Pavel Machek, list, linux-iio,
	linux-kernel, linux-mips, linux-mmc, linux-pm, Paul Cercueil

Use the new EXPORT_RUNTIME_DEV_PM_OPS() macro. It allows the underlying
dev_pm_ops struct as well as the suspend/resume callbacks to be detected
as dead code in the case where CONFIG_PM is disabled, without having to
wrap everything inside #ifdef CONFIG_PM guards.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---

Notes:
    v2: New patch

 drivers/iio/pressure/bmp280-core.c | 11 ++---------
 drivers/iio/pressure/bmp280-i2c.c  |  2 +-
 drivers/iio/pressure/bmp280-spi.c  |  2 +-
 3 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
index 6b7da40f99c8..bf8167f43c56 100644
--- a/drivers/iio/pressure/bmp280-core.c
+++ b/drivers/iio/pressure/bmp280-core.c
@@ -1138,7 +1138,6 @@ int bmp280_common_probe(struct device *dev,
 }
 EXPORT_SYMBOL(bmp280_common_probe);
 
-#ifdef CONFIG_PM
 static int bmp280_runtime_suspend(struct device *dev)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
@@ -1159,15 +1158,9 @@ static int bmp280_runtime_resume(struct device *dev)
 	usleep_range(data->start_up_time, data->start_up_time + 100);
 	return data->chip_info->chip_config(data);
 }
-#endif /* CONFIG_PM */
 
-const struct dev_pm_ops bmp280_dev_pm_ops = {
-	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
-				pm_runtime_force_resume)
-	SET_RUNTIME_PM_OPS(bmp280_runtime_suspend,
-			   bmp280_runtime_resume, NULL)
-};
-EXPORT_SYMBOL(bmp280_dev_pm_ops);
+EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops, bmp280_runtime_suspend,
+			  bmp280_runtime_resume, NULL);
 
 MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
 MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
diff --git a/drivers/iio/pressure/bmp280-i2c.c b/drivers/iio/pressure/bmp280-i2c.c
index 8b03ea15c0d0..35045bd92846 100644
--- a/drivers/iio/pressure/bmp280-i2c.c
+++ b/drivers/iio/pressure/bmp280-i2c.c
@@ -58,7 +58,7 @@ static struct i2c_driver bmp280_i2c_driver = {
 	.driver = {
 		.name	= "bmp280",
 		.of_match_table = bmp280_of_i2c_match,
-		.pm = &bmp280_dev_pm_ops,
+		.pm = pm_ptr(&bmp280_dev_pm_ops),
 	},
 	.probe		= bmp280_i2c_probe,
 	.id_table	= bmp280_i2c_id,
diff --git a/drivers/iio/pressure/bmp280-spi.c b/drivers/iio/pressure/bmp280-spi.c
index 625b86878ad8..41f6cc56d229 100644
--- a/drivers/iio/pressure/bmp280-spi.c
+++ b/drivers/iio/pressure/bmp280-spi.c
@@ -109,7 +109,7 @@ static struct spi_driver bmp280_spi_driver = {
 	.driver = {
 		.name = "bmp280",
 		.of_match_table = bmp280_of_spi_match,
-		.pm = &bmp280_dev_pm_ops,
+		.pm = pm_ptr(&bmp280_dev_pm_ops),
 	},
 	.id_table = bmp280_spi_id,
 	.probe = bmp280_spi_probe,
-- 
2.34.1


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

* Re: [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros
  2022-01-05 18:29 ` [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros Paul Cercueil
@ 2022-01-06 13:42   ` Jonathan Cameron
  0 siblings, 0 replies; 16+ messages in thread
From: Jonathan Cameron @ 2022-01-06 13:42 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Ulf Hansson, Jonathan Cameron,
	Lars-Peter Clausen, Linus Walleij, Arnd Bergmann, Len Brown,
	Pavel Machek, list, linux-iio, linux-kernel, linux-mips,
	linux-mmc, linux-pm

On Wed, 5 Jan 2022 18:29:39 +0000
Paul Cercueil <paul@crapouillou.net> wrote:

> Use the new EXPORT_RUNTIME_DEV_PM_OPS() macro. It allows the underlying
> dev_pm_ops struct as well as the suspend/resume callbacks to be detected
> as dead code in the case where CONFIG_PM is disabled, without having to
> wrap everything inside #ifdef CONFIG_PM guards.
> 
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Thanks

> ---
> 
> Notes:
>     v2: New patch
> 
>  drivers/iio/pressure/bmp280-core.c | 11 ++---------
>  drivers/iio/pressure/bmp280-i2c.c  |  2 +-
>  drivers/iio/pressure/bmp280-spi.c  |  2 +-
>  3 files changed, 4 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c
> index 6b7da40f99c8..bf8167f43c56 100644
> --- a/drivers/iio/pressure/bmp280-core.c
> +++ b/drivers/iio/pressure/bmp280-core.c
> @@ -1138,7 +1138,6 @@ int bmp280_common_probe(struct device *dev,
>  }
>  EXPORT_SYMBOL(bmp280_common_probe);
>  
> -#ifdef CONFIG_PM
>  static int bmp280_runtime_suspend(struct device *dev)
>  {
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> @@ -1159,15 +1158,9 @@ static int bmp280_runtime_resume(struct device *dev)
>  	usleep_range(data->start_up_time, data->start_up_time + 100);
>  	return data->chip_info->chip_config(data);
>  }
> -#endif /* CONFIG_PM */
>  
> -const struct dev_pm_ops bmp280_dev_pm_ops = {
> -	SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> -				pm_runtime_force_resume)
> -	SET_RUNTIME_PM_OPS(bmp280_runtime_suspend,
> -			   bmp280_runtime_resume, NULL)
> -};
> -EXPORT_SYMBOL(bmp280_dev_pm_ops);
> +EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops, bmp280_runtime_suspend,
> +			  bmp280_runtime_resume, NULL);
>  
>  MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
>  MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
> diff --git a/drivers/iio/pressure/bmp280-i2c.c b/drivers/iio/pressure/bmp280-i2c.c
> index 8b03ea15c0d0..35045bd92846 100644
> --- a/drivers/iio/pressure/bmp280-i2c.c
> +++ b/drivers/iio/pressure/bmp280-i2c.c
> @@ -58,7 +58,7 @@ static struct i2c_driver bmp280_i2c_driver = {
>  	.driver = {
>  		.name	= "bmp280",
>  		.of_match_table = bmp280_of_i2c_match,
> -		.pm = &bmp280_dev_pm_ops,
> +		.pm = pm_ptr(&bmp280_dev_pm_ops),
>  	},
>  	.probe		= bmp280_i2c_probe,
>  	.id_table	= bmp280_i2c_id,
> diff --git a/drivers/iio/pressure/bmp280-spi.c b/drivers/iio/pressure/bmp280-spi.c
> index 625b86878ad8..41f6cc56d229 100644
> --- a/drivers/iio/pressure/bmp280-spi.c
> +++ b/drivers/iio/pressure/bmp280-spi.c
> @@ -109,7 +109,7 @@ static struct spi_driver bmp280_spi_driver = {
>  	.driver = {
>  		.name = "bmp280",
>  		.of_match_table = bmp280_of_spi_match,
> -		.pm = &bmp280_dev_pm_ops,
> +		.pm = pm_ptr(&bmp280_dev_pm_ops),
>  	},
>  	.id_table = bmp280_spi_id,
>  	.probe = bmp280_spi_probe,


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

* Re: [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  2022-01-05 18:29 ` [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro Paul Cercueil
@ 2022-01-07 16:26   ` Ulf Hansson
  2022-01-07 16:37     ` Paul Cercueil
  0 siblings, 1 reply; 16+ messages in thread
From: Ulf Hansson @ 2022-01-07 16:26 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

On Wed, 5 Jan 2022 at 19:29, Paul Cercueil <paul@crapouillou.net> wrote:
>
> The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided callbacks
> for both runtime PM and system sleep, which is very likely to be a
> mistake, as a system sleep can be triggered while a given device is
> already PM-suspended, which would cause the suspend callback to be
> called twice.
>
> The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
> occurences) compared to the number of places where
> SET_SYSTEM_SLEEP_PM_OPS() is used with pm_runtime_force_suspend() and
> pm_runtime_force_resume(), which makes me think that none of these cases
> are actually valid.
>
> As this macro is currently unused, remove it before someone starts to
> use it in yet another invalid case.

I assume you refer to DEFINE_UNIVERSAL_DEV_PM_OPS here. Can you
perhaps make that more clear?

>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
>
> Notes:
>     v2: No change
>
>  include/linux/pm.h | 19 ++++++-------------
>  1 file changed, 6 insertions(+), 13 deletions(-)
>
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index e1e9402180b9..31bbaafb06d2 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
>         SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>  }
>
> +/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
> +#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> +const struct dev_pm_ops __maybe_unused name = { \
> +       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +}
> +
>  /*
>   * Use this for defining a set of PM operations to be used in all situations
>   * (system suspend, hibernation or runtime PM).
> @@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
>   * .resume_early(), to the same routines as .runtime_suspend() and
>   * .runtime_resume(), respectively (and analogously for hibernation).
>   */
> -#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
> -static const struct dev_pm_ops name = { \
> -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> -       RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> -}
> -
> -/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
> -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> -const struct dev_pm_ops __maybe_unused name = { \
> -       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> -}
> -
> -/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */

Shouldn't this macro be deprecated any more?

>  #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) \
>  const struct dev_pm_ops __maybe_unused name = { \
>         SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> --
> 2.34.1
>

Kind regards
Uffe

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

* Re: [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro
  2022-01-05 18:29 ` [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro Paul Cercueil
@ 2022-01-07 16:26   ` Ulf Hansson
  0 siblings, 0 replies; 16+ messages in thread
From: Ulf Hansson @ 2022-01-07 16:26 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

On Wed, 5 Jan 2022 at 19:29, Paul Cercueil <paul@crapouillou.net> wrote:
>
> Keep this macro in line with the other ones. This makes it possible to
> use them in the cases where the underlying dev_pm_ops structure is
> exported.
>
> Restore the "static" qualifier in the two drivers where the
> DEFINE_SIMPLE_DEV_PM_OPS macro was used.
>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

Kind regards
Uffe

> ---
>
> Notes:
>     v2: Merge the driver changes to make the commit atomic
>
>  drivers/mmc/host/jz4740_mmc.c | 4 ++--
>  drivers/mmc/host/mxcmmc.c     | 2 +-
>  include/linux/pm.h            | 2 +-
>  3 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c
> index 7693236c946f..7ab1b38a7be5 100644
> --- a/drivers/mmc/host/jz4740_mmc.c
> +++ b/drivers/mmc/host/jz4740_mmc.c
> @@ -1128,8 +1128,8 @@ static int jz4740_mmc_resume(struct device *dev)
>         return pinctrl_select_default_state(dev);
>  }
>
> -DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
> -       jz4740_mmc_resume);
> +static DEFINE_SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
> +                               jz4740_mmc_resume);
>
>  static struct platform_driver jz4740_mmc_driver = {
>         .probe = jz4740_mmc_probe,
> diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c
> index 98c218bd6669..40b6878bea6c 100644
> --- a/drivers/mmc/host/mxcmmc.c
> +++ b/drivers/mmc/host/mxcmmc.c
> @@ -1210,7 +1210,7 @@ static int mxcmci_resume(struct device *dev)
>         return ret;
>  }
>
> -DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
> +static DEFINE_SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
>
>  static struct platform_driver mxcmci_driver = {
>         .probe          = mxcmci_probe,
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index 31bbaafb06d2..389e600df233 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -362,7 +362,7 @@ struct dev_pm_ops {
>   * to RAM and hibernation.
>   */
>  #define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> -static const struct dev_pm_ops name = { \
> +const struct dev_pm_ops name = { \
>         SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>  }
>
> --
> 2.34.1
>

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

* Re: [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
  2022-01-05 18:29 ` [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros Paul Cercueil
@ 2022-01-07 16:33   ` Ulf Hansson
  2022-01-07 16:43     ` Paul Cercueil
  0 siblings, 1 reply; 16+ messages in thread
From: Ulf Hansson @ 2022-01-07 16:33 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

On Wed, 5 Jan 2022 at 19:30, Paul Cercueil <paul@crapouillou.net> wrote:
>
> These macros are defined conditionally, according to CONFIG_PM:
> - if CONFIG_PM is enabled, these macros resolve to
>   DEFINE_SIMPLE_DEV_PM_OPS(), and the dev_pm_ops symbol will be
>   exported.
>
> - if CONFIG_PM is disabled, these macros will result in a dummy static
>   dev_pm_ops to be created with the __maybe_unused flag. The dev_pm_ops
>   will then be discarded by the compiler, along with the provided
>   callback functions if they are not used anywhere else.
>
> In the second case, the symbol is not exported, which should be
> perfectly fine - users of the symbol should all use the pm_ptr() or
> pm_sleep_ptr() macro, so the dev_pm_ops marked as "extern" in the
> client's code will never be accessed.

How common is it to export the dev_pm_ops? Do we really need a macro for this?

The similar comment/question applies for patch5.

>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Kind regards
Uffe

> ---
>
> Notes:
>     v2: Remove useless empty line
>
>  include/linux/pm.h | 32 +++++++++++++++++++++++++++++---
>  1 file changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index 389e600df233..b82f40e701ab 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -8,6 +8,7 @@
>  #ifndef _LINUX_PM_H
>  #define _LINUX_PM_H
>
> +#include <linux/export.h>
>  #include <linux/list.h>
>  #include <linux/workqueue.h>
>  #include <linux/spinlock.h>
> @@ -357,14 +358,39 @@ struct dev_pm_ops {
>  #define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
>  #endif
>
> +#define _DEFINE_DEV_PM_OPS(name, \
> +                          suspend_fn, resume_fn, \
> +                          runtime_suspend_fn, runtime_resume_fn, idle_fn) \
> +const struct dev_pm_ops name = { \
> +       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +       RUNTIME_PM_OPS(runtime_suspend_fn, runtime_resume_fn, idle_fn) \
> +}
> +
>  /*
>   * Use this if you want to use the same suspend and resume callbacks for suspend
>   * to RAM and hibernation.
>   */
>  #define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> -const struct dev_pm_ops name = { \
> -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> -}
> +       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
> +
> +#ifdef CONFIG_PM
> +#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> +                          runtime_resume_fn, idle_fn, sec) \
> +       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> +                          runtime_resume_fn, idle_fn); \
> +       _EXPORT_SYMBOL(name, sec)
> +#else
> +#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> +                          runtime_resume_fn, idle_fn, sec) \
> +static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
> +                                        resume_fn, runtime_suspend_fn, \
> +                                        runtime_resume_fn, idle_fn)
> +#endif
> +
> +#define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> +       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "")
> +#define EXPORT_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> +       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl")
>
>  /* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>  #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> --
> 2.34.1
>

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

* Re: [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  2022-01-07 16:26   ` Ulf Hansson
@ 2022-01-07 16:37     ` Paul Cercueil
  2022-01-07 16:40       ` Ulf Hansson
  0 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-07 16:37 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

Hi Ulf,

Le ven., janv. 7 2022 at 17:26:07 +0100, Ulf Hansson 
<ulf.hansson@linaro.org> a écrit :
> On Wed, 5 Jan 2022 at 19:29, Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>>  The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided 
>> callbacks
>>  for both runtime PM and system sleep, which is very likely to be a
>>  mistake, as a system sleep can be triggered while a given device is
>>  already PM-suspended, which would cause the suspend callback to be
>>  called twice.
>> 
>>  The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
>>  occurences) compared to the number of places where
>>  SET_SYSTEM_SLEEP_PM_OPS() is used with pm_runtime_force_suspend() 
>> and
>>  pm_runtime_force_resume(), which makes me think that none of these 
>> cases
>>  are actually valid.
>> 
>>  As this macro is currently unused, remove it before someone starts 
>> to
>>  use it in yet another invalid case.
> 
> I assume you refer to DEFINE_UNIVERSAL_DEV_PM_OPS here. Can you
> perhaps make that more clear?

I can.

>> 
>>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>>  ---
>> 
>>  Notes:
>>      v2: No change
>> 
>>   include/linux/pm.h | 19 ++++++-------------
>>   1 file changed, 6 insertions(+), 13 deletions(-)
>> 
>>  diff --git a/include/linux/pm.h b/include/linux/pm.h
>>  index e1e9402180b9..31bbaafb06d2 100644
>>  --- a/include/linux/pm.h
>>  +++ b/include/linux/pm.h
>>  @@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
>>          SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>   }
>> 
>>  +/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>>  +#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  +const struct dev_pm_ops __maybe_unused name = { \
>>  +       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  +}
>>  +
>>   /*
>>    * Use this for defining a set of PM operations to be used in all 
>> situations
>>    * (system suspend, hibernation or runtime PM).
>>  @@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
>>    * .resume_early(), to the same routines as .runtime_suspend() and
>>    * .runtime_resume(), respectively (and analogously for 
>> hibernation).
>>    */
>>  -#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> idle_fn) \
>>  -static const struct dev_pm_ops name = { \
>>  -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  -       RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
>>  -}
>>  -
>>  -/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>>  -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  -const struct dev_pm_ops __maybe_unused name = { \
>>  -       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  -}
>>  -
>>  -/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
> 
> Shouldn't this macro be deprecated any more?

I can only deprecate it if there is an alternative for it. The 
alternative is DEFINE_RUNTIME_DEV_PM_OPS() which is added in patch 4/6.

Cheers,
-Paul

>>   #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn) 
>> \
>>   const struct dev_pm_ops __maybe_unused name = { \
>>          SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  --
>>  2.34.1
>> 
> 
> Kind regards
> Uffe



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

* Re: [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  2022-01-07 16:37     ` Paul Cercueil
@ 2022-01-07 16:40       ` Ulf Hansson
  2022-01-07 17:39         ` Paul Cercueil
  0 siblings, 1 reply; 16+ messages in thread
From: Ulf Hansson @ 2022-01-07 16:40 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

On Fri, 7 Jan 2022 at 17:37, Paul Cercueil <paul@crapouillou.net> wrote:
>
> Hi Ulf,
>
> Le ven., janv. 7 2022 at 17:26:07 +0100, Ulf Hansson
> <ulf.hansson@linaro.org> a écrit :
> > On Wed, 5 Jan 2022 at 19:29, Paul Cercueil <paul@crapouillou.net>
> > wrote:
> >>
> >>  The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided
> >> callbacks
> >>  for both runtime PM and system sleep, which is very likely to be a
> >>  mistake, as a system sleep can be triggered while a given device is
> >>  already PM-suspended, which would cause the suspend callback to be
> >>  called twice.
> >>
> >>  The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
> >>  occurences) compared to the number of places where
> >>  SET_SYSTEM_SLEEP_PM_OPS() is used with pm_runtime_force_suspend()
> >> and
> >>  pm_runtime_force_resume(), which makes me think that none of these
> >> cases
> >>  are actually valid.
> >>
> >>  As this macro is currently unused, remove it before someone starts
> >> to
> >>  use it in yet another invalid case.
> >
> > I assume you refer to DEFINE_UNIVERSAL_DEV_PM_OPS here. Can you
> > perhaps make that more clear?
>
> I can.
>
> >>
> >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> >>  Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> >>  ---
> >>
> >>  Notes:
> >>      v2: No change
> >>
> >>   include/linux/pm.h | 19 ++++++-------------
> >>   1 file changed, 6 insertions(+), 13 deletions(-)
> >>
> >>  diff --git a/include/linux/pm.h b/include/linux/pm.h
> >>  index e1e9402180b9..31bbaafb06d2 100644
> >>  --- a/include/linux/pm.h
> >>  +++ b/include/linux/pm.h
> >>  @@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
> >>          SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> >>   }
> >>
> >>  +/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
> >>  +#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> >>  +const struct dev_pm_ops __maybe_unused name = { \
> >>  +       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> >>  +}
> >>  +
> >>   /*
> >>    * Use this for defining a set of PM operations to be used in all
> >> situations
> >>    * (system suspend, hibernation or runtime PM).
> >>  @@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
> >>    * .resume_early(), to the same routines as .runtime_suspend() and
> >>    * .runtime_resume(), respectively (and analogously for
> >> hibernation).
> >>    */
> >>  -#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn,
> >> idle_fn) \
> >>  -static const struct dev_pm_ops name = { \
> >>  -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> >>  -       RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> >>  -}
> >>  -
> >>  -/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
> >>  -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> >>  -const struct dev_pm_ops __maybe_unused name = { \
> >>  -       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> >>  -}
> >>  -
> >>  -/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
> >
> > Shouldn't this macro be deprecated any more?
>
> I can only deprecate it if there is an alternative for it. The
> alternative is DEFINE_RUNTIME_DEV_PM_OPS() which is added in patch 4/6.

I don't think we need an immediate alternative to leave it deprecated, do we?

My point is, a user can still combine the macros in a way so that it
doesn't need to use the UNIVERSAL_DEV_PM_OPS.

>
> Cheers,
> -Paul
>
> >>   #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn)
> >> \
> >>   const struct dev_pm_ops __maybe_unused name = { \
> >>          SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> >>  --

Kind regards
Uffe

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

* Re: [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
  2022-01-07 16:33   ` Ulf Hansson
@ 2022-01-07 16:43     ` Paul Cercueil
  2022-01-07 17:11       ` Ulf Hansson
  0 siblings, 1 reply; 16+ messages in thread
From: Paul Cercueil @ 2022-01-07 16:43 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron



Le ven., janv. 7 2022 at 17:33:04 +0100, Ulf Hansson 
<ulf.hansson@linaro.org> a écrit :
> On Wed, 5 Jan 2022 at 19:30, Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>>  These macros are defined conditionally, according to CONFIG_PM:
>>  - if CONFIG_PM is enabled, these macros resolve to
>>    DEFINE_SIMPLE_DEV_PM_OPS(), and the dev_pm_ops symbol will be
>>    exported.
>> 
>>  - if CONFIG_PM is disabled, these macros will result in a dummy 
>> static
>>    dev_pm_ops to be created with the __maybe_unused flag. The 
>> dev_pm_ops
>>    will then be discarded by the compiler, along with the provided
>>    callback functions if they are not used anywhere else.
>> 
>>  In the second case, the symbol is not exported, which should be
>>  perfectly fine - users of the symbol should all use the pm_ptr() or
>>  pm_sleep_ptr() macro, so the dev_pm_ops marked as "extern" in the
>>  client's code will never be accessed.
> 
> How common is it to export the dev_pm_ops? Do we really need a macro 
> for this?

$ rgrep EXPORT_SYMBOL drivers/ |grep pm_ops |wc -l
44

That should be enough to justify a macro.

Cheers,
-Paul

> 
> The similar comment/question applies for patch5.
> 
>> 
>>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> Kind regards
> Uffe
> 
>>  ---
>> 
>>  Notes:
>>      v2: Remove useless empty line
>> 
>>   include/linux/pm.h | 32 +++++++++++++++++++++++++++++---
>>   1 file changed, 29 insertions(+), 3 deletions(-)
>> 
>>  diff --git a/include/linux/pm.h b/include/linux/pm.h
>>  index 389e600df233..b82f40e701ab 100644
>>  --- a/include/linux/pm.h
>>  +++ b/include/linux/pm.h
>>  @@ -8,6 +8,7 @@
>>   #ifndef _LINUX_PM_H
>>   #define _LINUX_PM_H
>> 
>>  +#include <linux/export.h>
>>   #include <linux/list.h>
>>   #include <linux/workqueue.h>
>>   #include <linux/spinlock.h>
>>  @@ -357,14 +358,39 @@ struct dev_pm_ops {
>>   #define SET_RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn)
>>   #endif
>> 
>>  +#define _DEFINE_DEV_PM_OPS(name, \
>>  +                          suspend_fn, resume_fn, \
>>  +                          runtime_suspend_fn, runtime_resume_fn, 
>> idle_fn) \
>>  +const struct dev_pm_ops name = { \
>>  +       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  +       RUNTIME_PM_OPS(runtime_suspend_fn, runtime_resume_fn, 
>> idle_fn) \
>>  +}
>>  +
>>   /*
>>    * Use this if you want to use the same suspend and resume 
>> callbacks for suspend
>>    * to RAM and hibernation.
>>    */
>>   #define DEFINE_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  -const struct dev_pm_ops name = { \
>>  -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  -}
>>  +       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL)
>>  +
>>  +#ifdef CONFIG_PM
>>  +#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  +                          runtime_resume_fn, idle_fn, sec) \
>>  +       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  +                          runtime_resume_fn, idle_fn); \
>>  +       _EXPORT_SYMBOL(name, sec)
>>  +#else
>>  +#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  +                          runtime_resume_fn, idle_fn, sec) \
>>  +static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, 
>> suspend_fn, \
>>  +                                        resume_fn, 
>> runtime_suspend_fn, \
>>  +                                        runtime_resume_fn, idle_fn)
>>  +#endif
>>  +
>>  +#define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  +       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL, "")
>>  +#define EXPORT_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  +       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL, "_gpl")
>> 
>>   /* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>>   #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  --
>>  2.34.1
>> 



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

* Re: [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros
  2022-01-07 16:43     ` Paul Cercueil
@ 2022-01-07 17:11       ` Ulf Hansson
  0 siblings, 0 replies; 16+ messages in thread
From: Ulf Hansson @ 2022-01-07 17:11 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron

On Fri, 7 Jan 2022 at 17:43, Paul Cercueil <paul@crapouillou.net> wrote:
>
>
>
> Le ven., janv. 7 2022 at 17:33:04 +0100, Ulf Hansson
> <ulf.hansson@linaro.org> a écrit :
> > On Wed, 5 Jan 2022 at 19:30, Paul Cercueil <paul@crapouillou.net>
> > wrote:
> >>
> >>  These macros are defined conditionally, according to CONFIG_PM:
> >>  - if CONFIG_PM is enabled, these macros resolve to
> >>    DEFINE_SIMPLE_DEV_PM_OPS(), and the dev_pm_ops symbol will be
> >>    exported.
> >>
> >>  - if CONFIG_PM is disabled, these macros will result in a dummy
> >> static
> >>    dev_pm_ops to be created with the __maybe_unused flag. The
> >> dev_pm_ops
> >>    will then be discarded by the compiler, along with the provided
> >>    callback functions if they are not used anywhere else.
> >>
> >>  In the second case, the symbol is not exported, which should be
> >>  perfectly fine - users of the symbol should all use the pm_ptr() or
> >>  pm_sleep_ptr() macro, so the dev_pm_ops marked as "extern" in the
> >>  client's code will never be accessed.
> >
> > How common is it to export the dev_pm_ops? Do we really need a macro
> > for this?
>
> $ rgrep EXPORT_SYMBOL drivers/ |grep pm_ops |wc -l
> 44
>
> That should be enough to justify a macro.

Yep, certainly! I will take a closer look beginning next week.

[...]

Kind regards
Uffe

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

* Re: [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro
  2022-01-07 16:40       ` Ulf Hansson
@ 2022-01-07 17:39         ` Paul Cercueil
  0 siblings, 0 replies; 16+ messages in thread
From: Paul Cercueil @ 2022-01-07 17:39 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: Rafael J . Wysocki, Jonathan Cameron, Lars-Peter Clausen,
	Linus Walleij, Arnd Bergmann, Len Brown, Pavel Machek, list,
	linux-iio, linux-kernel, linux-mips, linux-mmc, linux-pm,
	Jonathan Cameron



Le ven., janv. 7 2022 at 17:40:57 +0100, Ulf Hansson 
<ulf.hansson@linaro.org> a écrit :
> On Fri, 7 Jan 2022 at 17:37, Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>>  Hi Ulf,
>> 
>>  Le ven., janv. 7 2022 at 17:26:07 +0100, Ulf Hansson
>>  <ulf.hansson@linaro.org> a écrit :
>>  > On Wed, 5 Jan 2022 at 19:29, Paul Cercueil <paul@crapouillou.net>
>>  > wrote:
>>  >>
>>  >>  The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided
>>  >> callbacks
>>  >>  for both runtime PM and system sleep, which is very likely to 
>> be a
>>  >>  mistake, as a system sleep can be triggered while a given 
>> device is
>>  >>  already PM-suspended, which would cause the suspend callback to 
>> be
>>  >>  called twice.
>>  >>
>>  >>  The amount of users of UNIVERSAL_DEV_PM_OPS() is also tiny (16
>>  >>  occurences) compared to the number of places where
>>  >>  SET_SYSTEM_SLEEP_PM_OPS() is used with 
>> pm_runtime_force_suspend()
>>  >> and
>>  >>  pm_runtime_force_resume(), which makes me think that none of 
>> these
>>  >> cases
>>  >>  are actually valid.
>>  >>
>>  >>  As this macro is currently unused, remove it before someone 
>> starts
>>  >> to
>>  >>  use it in yet another invalid case.
>>  >
>>  > I assume you refer to DEFINE_UNIVERSAL_DEV_PM_OPS here. Can you
>>  > perhaps make that more clear?
>> 
>>  I can.
>> 
>>  >>
>>  >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  >>  Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>>  >>  ---
>>  >>
>>  >>  Notes:
>>  >>      v2: No change
>>  >>
>>  >>   include/linux/pm.h | 19 ++++++-------------
>>  >>   1 file changed, 6 insertions(+), 13 deletions(-)
>>  >>
>>  >>  diff --git a/include/linux/pm.h b/include/linux/pm.h
>>  >>  index e1e9402180b9..31bbaafb06d2 100644
>>  >>  --- a/include/linux/pm.h
>>  >>  +++ b/include/linux/pm.h
>>  >>  @@ -366,6 +366,12 @@ static const struct dev_pm_ops name = { \
>>  >>          SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  >>   }
>>  >>
>>  >>  +/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>>  >>  +#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  >>  +const struct dev_pm_ops __maybe_unused name = { \
>>  >>  +       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  >>  +}
>>  >>  +
>>  >>   /*
>>  >>    * Use this for defining a set of PM operations to be used in 
>> all
>>  >> situations
>>  >>    * (system suspend, hibernation or runtime PM).
>>  >>  @@ -379,19 +385,6 @@ static const struct dev_pm_ops name = { \
>>  >>    * .resume_early(), to the same routines as .runtime_suspend() 
>> and
>>  >>    * .runtime_resume(), respectively (and analogously for
>>  >> hibernation).
>>  >>    */
>>  >>  -#define DEFINE_UNIVERSAL_DEV_PM_OPS(name, suspend_fn, 
>> resume_fn,
>>  >> idle_fn) \
>>  >>  -static const struct dev_pm_ops name = { \
>>  >>  -       SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  >>  -       RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
>>  >>  -}
>>  >>  -
>>  >>  -/* Deprecated. Use DEFINE_SIMPLE_DEV_PM_OPS() instead. */
>>  >>  -#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  >>  -const struct dev_pm_ops __maybe_unused name = { \
>>  >>  -       SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  >>  -}
>>  >>  -
>>  >>  -/* Deprecated. Use DEFINE_UNIVERSAL_DEV_PM_OPS() instead. */
>>  >
>>  > Shouldn't this macro be deprecated any more?
>> 
>>  I can only deprecate it if there is an alternative for it. The
>>  alternative is DEFINE_RUNTIME_DEV_PM_OPS() which is added in patch 
>> 4/6.
> 
> I don't think we need an immediate alternative to leave it 
> deprecated, do we?
> 
> My point is, a user can still combine the macros in a way so that it
> doesn't need to use the UNIVERSAL_DEV_PM_OPS.

Ok. I'll leave it deprecated in that patch then.

Cheers,
-Paul

>>  >>   #define UNIVERSAL_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> idle_fn)
>>  >> \
>>  >>   const struct dev_pm_ops __maybe_unused name = { \
>>  >>          SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  >>  --
> 
> Kind regards
> Uffe



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

end of thread, other threads:[~2022-01-07 17:39 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-05 18:29 [PATCH v2 0/6] DEV_PM_OPS macros rework v2 Paul Cercueil
2022-01-05 18:29 ` [PATCH v2 1/6] PM: core: Remove DEFINE_UNIVERSAL_DEV_PM_OPS() macro Paul Cercueil
2022-01-07 16:26   ` Ulf Hansson
2022-01-07 16:37     ` Paul Cercueil
2022-01-07 16:40       ` Ulf Hansson
2022-01-07 17:39         ` Paul Cercueil
2022-01-05 18:29 ` [PATCH v2 2/6] PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro Paul Cercueil
2022-01-07 16:26   ` Ulf Hansson
2022-01-05 18:29 ` [PATCH v2 3/6] PM: core: Add EXPORT[_GPL]_SIMPLE_DEV_PM_OPS macros Paul Cercueil
2022-01-07 16:33   ` Ulf Hansson
2022-01-07 16:43     ` Paul Cercueil
2022-01-07 17:11       ` Ulf Hansson
2022-01-05 18:29 ` [PATCH v2 4/6] PM: runtime: Add DEFINE_RUNTIME_DEV_PM_OPS() macro Paul Cercueil
2022-01-05 18:29 ` [PATCH v2 5/6] PM: runtime: Add EXPORT[_GPL]_RUNTIME_DEV_PM_OPS macros Paul Cercueil
2022-01-05 18:29 ` [PATCH v2 6/6] iio: pressure: bmp280: Use new PM macros Paul Cercueil
2022-01-06 13:42   ` Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.