diff mbox series

[v2,01/30] pm: Improve EXPORT_*_DEV_PM_OPS macros

Message ID 20220808174107.38676-2-paul@crapouillou.net
State Accepted
Commit 34e1ed189fab1b7533befb266b96051104c1deb6
Headers show
Series mfd: Remove #ifdef guards for PM functions | expand

Commit Message

Paul Cercueil Aug. 8, 2022, 5:40 p.m. UTC
Update the _EXPORT_DEV_PM_OPS() internal macro. It was not used anywhere
outside pm.h and pm_runtime.h, so it is safe to update it.

Before, this macro would take a few parameters to be used as sleep and
runtime callbacks. This made it unsuitable to use with different
callbacks, for instance the "noirq" ones.

It is now semantically different: instead of creating a conditionally
exported dev_pm_ops structure, it only contains part of the definition.

This macro should however never be used directly (hence the trailing
underscore). Instead, the following four macros are provided:
- EXPORT_DEV_PM_OPS(name)
- EXPORT_GPL_DEV_PM_OPS(name)
- EXPORT_NS_DEV_PM_OPS(name, ns)
- EXPORT_NS_GPL_DEV_PM_OPS(name, ns)

For instance, it is now possible to conditionally export noirq
suspend/resume PM functions like this:

EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
    NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
};

The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these new macros.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
Cc: Jonathan Cameron <jic23@kernel.org>
Cc: Rafael J. Wysocki <rafael@kernel.org>
Cc: linux-pm <linux-pm@vger.kernel.org>

 include/linux/pm.h         | 37 +++++++++++++++++++++++--------------
 include/linux/pm_runtime.h | 20 ++++++++++++--------
 2 files changed, 35 insertions(+), 22 deletions(-)

Comments

Jonathan Cameron Aug. 13, 2022, 2:49 p.m. UTC | #1
On Mon,  8 Aug 2022 19:40:38 +0200
Paul Cercueil <paul@crapouillou.net> wrote:

> Update the _EXPORT_DEV_PM_OPS() internal macro. It was not used anywhere
> outside pm.h and pm_runtime.h, so it is safe to update it.
> 
> Before, this macro would take a few parameters to be used as sleep and
> runtime callbacks. This made it unsuitable to use with different
> callbacks, for instance the "noirq" ones.
> 
> It is now semantically different: instead of creating a conditionally
> exported dev_pm_ops structure, it only contains part of the definition.
> 
> This macro should however never be used directly (hence the trailing
> underscore). Instead, the following four macros are provided:
> - EXPORT_DEV_PM_OPS(name)
> - EXPORT_GPL_DEV_PM_OPS(name)
> - EXPORT_NS_DEV_PM_OPS(name, ns)
> - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
> 
> For instance, it is now possible to conditionally export noirq
> suspend/resume PM functions like this:
> 
> EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
>     NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> };
> 
> The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
> EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these new macros.
> 
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Looks good to me and much nicer than me making the situation worse
as I did in the proposal to have a macro that took even more callbacks
as it's parameters.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

> ---
> Cc: Jonathan Cameron <jic23@kernel.org>
> Cc: Rafael J. Wysocki <rafael@kernel.org>
> Cc: linux-pm <linux-pm@vger.kernel.org>
> 
>  include/linux/pm.h         | 37 +++++++++++++++++++++++--------------
>  include/linux/pm_runtime.h | 20 ++++++++++++--------
>  2 files changed, 35 insertions(+), 22 deletions(-)
> 
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index 871c9c49ec9d..93cd34f00822 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -375,19 +375,20 @@ const struct dev_pm_ops name = { \
>  }
>  
>  #ifdef CONFIG_PM
> -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -			   runtime_resume_fn, idle_fn, sec, ns)		\
> -	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -			   runtime_resume_fn, idle_fn); \
> -	__EXPORT_SYMBOL(name, sec, ns)
> +#define _EXPORT_DEV_PM_OPS(name, sec, ns)				\
> +	const struct dev_pm_ops name;					\
> +	__EXPORT_SYMBOL(name, sec, ns);					\
> +	const struct dev_pm_ops name
>  #else
> -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -			   runtime_resume_fn, idle_fn, sec, ns) \
> -static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
> -					 resume_fn, runtime_suspend_fn, \
> -					 runtime_resume_fn, idle_fn)
> +#define _EXPORT_DEV_PM_OPS(name, sec, ns)				\
> +	static __maybe_unused const struct dev_pm_ops __static_##name
>  #endif
>  
> +#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
> +#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "_gpl", "")
> +#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "", #ns)
> +#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "_gpl", #ns)
> +
>  /*
>   * Use this if you want to use the same suspend and resume callbacks for suspend
>   * to RAM and hibernation.
> @@ -399,13 +400,21 @@ static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
>  	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
>  
>  #define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> -	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", "")
> +	EXPORT_DEV_PM_OPS(name) = { \
> +		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +	}
>  #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", "")
> +	EXPORT_GPL_DEV_PM_OPS(name) = { \
> +		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +	}
>  #define EXPORT_NS_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)	\
> -	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", #ns)
> +	EXPORT_NS_DEV_PM_OPS(name, ns) = { \
> +		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +	}
>  #define EXPORT_NS_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)	\
> -	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl", #ns)
> +	EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
> +		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) \
> diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
> index 9e4d056967c6..ba2077d9e366 100644
> --- a/include/linux/pm_runtime.h
> +++ b/include/linux/pm_runtime.h
> @@ -40,17 +40,21 @@
>  			   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, "", "")
> +	EXPORT_DEV_PM_OPS(name) = { \
> +		RUNTIME_PM_OPS(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", "")
> +	EXPORT_GPL_DEV_PM_OPS(name) = { \
> +		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +	}
>  #define EXPORT_NS_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
> -	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
> -			   suspend_fn, resume_fn, idle_fn, "", #ns)
> +	EXPORT_NS_DEV_PM_OPS(name, ns) = { \
> +		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +	}
>  #define EXPORT_NS_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
> -	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
> -			   suspend_fn, resume_fn, idle_fn, "_gpl", #ns)
> +	EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
> +		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +	}
>  
>  #ifdef CONFIG_PM
>  extern struct workqueue_struct *pm_wq;
Rafael J. Wysocki Aug. 23, 2022, 5:47 p.m. UTC | #2
On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil <paul@crapouillou.net> wrote:
>
> Update the _EXPORT_DEV_PM_OPS() internal macro. It was not used anywhere
> outside pm.h and pm_runtime.h, so it is safe to update it.
>
> Before, this macro would take a few parameters to be used as sleep and
> runtime callbacks. This made it unsuitable to use with different
> callbacks, for instance the "noirq" ones.
>
> It is now semantically different: instead of creating a conditionally
> exported dev_pm_ops structure, it only contains part of the definition.
>
> This macro should however never be used directly (hence the trailing
> underscore). Instead, the following four macros are provided:
> - EXPORT_DEV_PM_OPS(name)
> - EXPORT_GPL_DEV_PM_OPS(name)
> - EXPORT_NS_DEV_PM_OPS(name, ns)
> - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
>
> For instance, it is now possible to conditionally export noirq
> suspend/resume PM functions like this:
>
> EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
>     NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> };
>
> The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
> EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these new macros.
>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>

Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

or please let me know if you need me to pick up this one.

> ---
> Cc: Jonathan Cameron <jic23@kernel.org>
> Cc: Rafael J. Wysocki <rafael@kernel.org>
> Cc: linux-pm <linux-pm@vger.kernel.org>
>
>  include/linux/pm.h         | 37 +++++++++++++++++++++++--------------
>  include/linux/pm_runtime.h | 20 ++++++++++++--------
>  2 files changed, 35 insertions(+), 22 deletions(-)
>
> diff --git a/include/linux/pm.h b/include/linux/pm.h
> index 871c9c49ec9d..93cd34f00822 100644
> --- a/include/linux/pm.h
> +++ b/include/linux/pm.h
> @@ -375,19 +375,20 @@ const struct dev_pm_ops name = { \
>  }
>
>  #ifdef CONFIG_PM
> -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -                          runtime_resume_fn, idle_fn, sec, ns)         \
> -       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -                          runtime_resume_fn, idle_fn); \
> -       __EXPORT_SYMBOL(name, sec, ns)
> +#define _EXPORT_DEV_PM_OPS(name, sec, ns)                              \
> +       const struct dev_pm_ops name;                                   \
> +       __EXPORT_SYMBOL(name, sec, ns);                                 \
> +       const struct dev_pm_ops name
>  #else
> -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
> -                          runtime_resume_fn, idle_fn, sec, ns) \
> -static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
> -                                        resume_fn, runtime_suspend_fn, \
> -                                        runtime_resume_fn, idle_fn)
> +#define _EXPORT_DEV_PM_OPS(name, sec, ns)                              \
> +       static __maybe_unused const struct dev_pm_ops __static_##name
>  #endif
>
> +#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
> +#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "_gpl", "")
> +#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "", #ns)
> +#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "_gpl", #ns)
> +
>  /*
>   * Use this if you want to use the same suspend and resume callbacks for suspend
>   * to RAM and hibernation.
> @@ -399,13 +400,21 @@ static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
>         _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
>
>  #define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
> -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", "")
> +       EXPORT_DEV_PM_OPS(name) = { \
> +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +       }
>  #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", "")
> +       EXPORT_GPL_DEV_PM_OPS(name) = { \
> +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +       }
>  #define EXPORT_NS_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)   \
> -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", #ns)
> +       EXPORT_NS_DEV_PM_OPS(name, ns) = { \
> +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
> +       }
>  #define EXPORT_NS_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)       \
> -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl", #ns)
> +       EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
> +               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) \
> diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
> index 9e4d056967c6..ba2077d9e366 100644
> --- a/include/linux/pm_runtime.h
> +++ b/include/linux/pm_runtime.h
> @@ -40,17 +40,21 @@
>                            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, "", "")
> +       EXPORT_DEV_PM_OPS(name) = { \
> +               RUNTIME_PM_OPS(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", "")
> +       EXPORT_GPL_DEV_PM_OPS(name) = { \
> +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +       }
>  #define EXPORT_NS_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
> -       _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
> -                          suspend_fn, resume_fn, idle_fn, "", #ns)
> +       EXPORT_NS_DEV_PM_OPS(name, ns) = { \
> +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +       }
>  #define EXPORT_NS_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
> -       _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
> -                          suspend_fn, resume_fn, idle_fn, "_gpl", #ns)
> +       EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
> +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
> +       }
>
>  #ifdef CONFIG_PM
>  extern struct workqueue_struct *pm_wq;
> --
> 2.35.1
>
Paul Cercueil Aug. 25, 2022, 10:42 p.m. UTC | #3
Hi Rafael,

Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki 
<rafael@kernel.org> a écrit :
> On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was not used 
>> anywhere
>>  outside pm.h and pm_runtime.h, so it is safe to update it.
>> 
>>  Before, this macro would take a few parameters to be used as sleep 
>> and
>>  runtime callbacks. This made it unsuitable to use with different
>>  callbacks, for instance the "noirq" ones.
>> 
>>  It is now semantically different: instead of creating a 
>> conditionally
>>  exported dev_pm_ops structure, it only contains part of the 
>> definition.
>> 
>>  This macro should however never be used directly (hence the trailing
>>  underscore). Instead, the following four macros are provided:
>>  - EXPORT_DEV_PM_OPS(name)
>>  - EXPORT_GPL_DEV_PM_OPS(name)
>>  - EXPORT_NS_DEV_PM_OPS(name, ns)
>>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
>> 
>>  For instance, it is now possible to conditionally export noirq
>>  suspend/resume PM functions like this:
>> 
>>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
>>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
>>  };
>> 
>>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
>>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these new 
>> macros.
>> 
>>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> 
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> or please let me know if you need me to pick up this one.

Could you pick this one up then, and make a branch for Jonathan?

Cheers,
-Paul

> 
>>  ---
>>  Cc: Jonathan Cameron <jic23@kernel.org>
>>  Cc: Rafael J. Wysocki <rafael@kernel.org>
>>  Cc: linux-pm <linux-pm@vger.kernel.org>
>> 
>>   include/linux/pm.h         | 37 
>> +++++++++++++++++++++++--------------
>>   include/linux/pm_runtime.h | 20 ++++++++++++--------
>>   2 files changed, 35 insertions(+), 22 deletions(-)
>> 
>>  diff --git a/include/linux/pm.h b/include/linux/pm.h
>>  index 871c9c49ec9d..93cd34f00822 100644
>>  --- a/include/linux/pm.h
>>  +++ b/include/linux/pm.h
>>  @@ -375,19 +375,20 @@ const struct dev_pm_ops name = { \
>>   }
>> 
>>   #ifdef CONFIG_PM
>>  -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  -                          runtime_resume_fn, idle_fn, sec, ns)     
>>     \
>>  -       _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  -                          runtime_resume_fn, idle_fn); \
>>  -       __EXPORT_SYMBOL(name, sec, ns)
>>  +#define _EXPORT_DEV_PM_OPS(name, sec, ns)                          
>>     \
>>  +       const struct dev_pm_ops name;                               
>>     \
>>  +       __EXPORT_SYMBOL(name, sec, ns);                             
>>     \
>>  +       const struct dev_pm_ops name
>>   #else
>>  -#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> runtime_suspend_fn, \
>>  -                          runtime_resume_fn, idle_fn, sec, ns) \
>>  -static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, 
>> suspend_fn, \
>>  -                                        resume_fn, 
>> runtime_suspend_fn, \
>>  -                                        runtime_resume_fn, idle_fn)
>>  +#define _EXPORT_DEV_PM_OPS(name, sec, ns)                          
>>     \
>>  +       static __maybe_unused const struct dev_pm_ops 
>> __static_##name
>>   #endif
>> 
>>  +#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
>>  +#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, 
>> "_gpl", "")
>>  +#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, 
>> "", #ns)
>>  +#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) 
>> _EXPORT_DEV_PM_OPS(name, "_gpl", #ns)
>>  +
>>   /*
>>    * Use this if you want to use the same suspend and resume 
>> callbacks for suspend
>>    * to RAM and hibernation.
>>  @@ -399,13 +400,21 @@ static __maybe_unused 
>> _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
>>          _DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL)
>> 
>>   #define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
>>  -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL, "", "")
>>  +       EXPORT_DEV_PM_OPS(name) = { \
>>  +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  +       }
>>   #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", "")
>>  +       EXPORT_GPL_DEV_PM_OPS(name) = { \
>>  +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  +       }
>>   #define EXPORT_NS_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> ns)   \
>>  -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL, "", #ns)
>>  +       EXPORT_NS_DEV_PM_OPS(name, ns) = { \
>>  +               SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
>>  +       }
>>   #define EXPORT_NS_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, 
>> resume_fn, ns)       \
>>  -       _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, 
>> NULL, "_gpl", #ns)
>>  +       EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
>>  +               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) \
>>  diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
>>  index 9e4d056967c6..ba2077d9e366 100644
>>  --- a/include/linux/pm_runtime.h
>>  +++ b/include/linux/pm_runtime.h
>>  @@ -40,17 +40,21 @@
>>                             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, "", "")
>>  +       EXPORT_DEV_PM_OPS(name) = { \
>>  +               RUNTIME_PM_OPS(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", 
>> "")
>>  +       EXPORT_GPL_DEV_PM_OPS(name) = { \
>>  +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
>>  +       }
>>   #define EXPORT_NS_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, 
>> idle_fn, ns) \
>>  -       _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, 
>> pm_runtime_force_resume, \
>>  -                          suspend_fn, resume_fn, idle_fn, "", #ns)
>>  +       EXPORT_NS_DEV_PM_OPS(name, ns) = { \
>>  +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
>>  +       }
>>   #define EXPORT_NS_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, 
>> resume_fn, idle_fn, ns) \
>>  -       _EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, 
>> pm_runtime_force_resume, \
>>  -                          suspend_fn, resume_fn, idle_fn, "_gpl", 
>> #ns)
>>  +       EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
>>  +               RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
>>  +       }
>> 
>>   #ifdef CONFIG_PM
>>   extern struct workqueue_struct *pm_wq;
>>  --
>>  2.35.1
>>
Jonathan Cameron Sept. 25, 2022, 2:52 p.m. UTC | #4
On Thu, 25 Aug 2022 23:42:53 +0100
Paul Cercueil <paul@crapouillou.net> wrote:

> Hi Rafael,
> 
> Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki 
> <rafael@kernel.org> a écrit :
> > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil <paul@crapouillou.net> 
> > wrote:  
> >> 
> >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was not used 
> >> anywhere
> >>  outside pm.h and pm_runtime.h, so it is safe to update it.
> >> 
> >>  Before, this macro would take a few parameters to be used as sleep 
> >> and
> >>  runtime callbacks. This made it unsuitable to use with different
> >>  callbacks, for instance the "noirq" ones.
> >> 
> >>  It is now semantically different: instead of creating a 
> >> conditionally
> >>  exported dev_pm_ops structure, it only contains part of the 
> >> definition.
> >> 
> >>  This macro should however never be used directly (hence the trailing
> >>  underscore). Instead, the following four macros are provided:
> >>  - EXPORT_DEV_PM_OPS(name)
> >>  - EXPORT_GPL_DEV_PM_OPS(name)
> >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
> >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
> >> 
> >>  For instance, it is now possible to conditionally export noirq
> >>  suspend/resume PM functions like this:
> >> 
> >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
> >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> >>  };
> >> 
> >>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
> >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these new 
> >> macros.
> >> 
> >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>  
> > 
> > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > 
> > or please let me know if you need me to pick up this one.  
> 
> Could you pick this one up then, and make a branch for Jonathan?

Hi Paul, Rafael,

What happened to this in the end?  I can't immediately find it on 
any of the pm git tree branches.

At this stage in the cycle it would be great if this patch at least
makes the merge window, so we can make use of it next cycle.

Thanks,

Jonathan
Rafael J. Wysocki Sept. 26, 2022, 1:35 p.m. UTC | #5
On Mon, Sep 26, 2022 at 3:27 PM Paul Cercueil <paul@crapouillou.net> wrote:
>
> Hi,
>
> Le lun., sept. 26 2022 at 14:00:52 +0200, Rafael J. Wysocki
> <rafael@kernel.org> a écrit :
> > On Sun, Sep 25, 2022 at 4:52 PM Jonathan Cameron <jic23@kernel.org>
> > wrote:
> >>
> >>  On Thu, 25 Aug 2022 23:42:53 +0100
> >>  Paul Cercueil <paul@crapouillou.net> wrote:
> >>
> >>  > Hi Rafael,
> >>  >
> >>  > Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki
> >>  > <rafael@kernel.org> a écrit :
> >>  > > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil
> >> <paul@crapouillou.net>
> >>  > > wrote:
> >>  > >>
> >>  > >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was not
> >> used
> >>  > >> anywhere
> >>  > >>  outside pm.h and pm_runtime.h, so it is safe to update it.
> >>  > >>
> >>  > >>  Before, this macro would take a few parameters to be used as
> >> sleep
> >>  > >> and
> >>  > >>  runtime callbacks. This made it unsuitable to use with
> >> different
> >>  > >>  callbacks, for instance the "noirq" ones.
> >>  > >>
> >>  > >>  It is now semantically different: instead of creating a
> >>  > >> conditionally
> >>  > >>  exported dev_pm_ops structure, it only contains part of the
> >>  > >> definition.
> >>  > >>
> >>  > >>  This macro should however never be used directly (hence the
> >> trailing
> >>  > >>  underscore). Instead, the following four macros are provided:
> >>  > >>  - EXPORT_DEV_PM_OPS(name)
> >>  > >>  - EXPORT_GPL_DEV_PM_OPS(name)
> >>  > >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
> >>  > >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
> >>  > >>
> >>  > >>  For instance, it is now possible to conditionally export noirq
> >>  > >>  suspend/resume PM functions like this:
> >>  > >>
> >>  > >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
> >>  > >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> >>  > >>  };
> >>  > >>
> >>  > >>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
> >>  > >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these
> >> new
> >>  > >> macros.
> >>  > >>
> >>  > >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> >>  > >
> >>  > > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >>  > >
> >>  > > or please let me know if you need me to pick up this one.
> >>  >
> >>  > Could you pick this one up then, and make a branch for Jonathan?
> >>
> >>  Hi Paul, Rafael,
> >>
> >>  What happened to this in the end?  I can't immediately find it on
> >>  any of the pm git tree branches.
> >>
> >>  At this stage in the cycle it would be great if this patch at least
> >>  makes the merge window, so we can make use of it next cycle.
> >
> > I thought that this would go in along with the other patches in the
> > series.
> >
> > I can apply it directly, though, if needed.
> >
> > Thanks!
>
> I think at this point Jonathan can just take it in his tree with his
> own patchset. Then I'll rebase this patchset on v6.1-rc1.

Sure.

Jonathan, please go ahead and take the patch directly.
Jonathan Cameron Oct. 1, 2022, 5:01 p.m. UTC | #6
On Mon, 26 Sep 2022 15:35:35 +0200
"Rafael J. Wysocki" <rafael@kernel.org> wrote:

> On Mon, Sep 26, 2022 at 3:27 PM Paul Cercueil <paul@crapouillou.net> wrote:
> >
> > Hi,
> >
> > Le lun., sept. 26 2022 at 14:00:52 +0200, Rafael J. Wysocki
> > <rafael@kernel.org> a écrit :  
> > > On Sun, Sep 25, 2022 at 4:52 PM Jonathan Cameron <jic23@kernel.org>
> > > wrote:  
> > >>
> > >>  On Thu, 25 Aug 2022 23:42:53 +0100
> > >>  Paul Cercueil <paul@crapouillou.net> wrote:
> > >>  
> > >>  > Hi Rafael,
> > >>  >
> > >>  > Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki
> > >>  > <rafael@kernel.org> a écrit :  
> > >>  > > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil  
> > >> <paul@crapouillou.net>  
> > >>  > > wrote:  
> > >>  > >>
> > >>  > >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was not  
> > >> used  
> > >>  > >> anywhere
> > >>  > >>  outside pm.h and pm_runtime.h, so it is safe to update it.
> > >>  > >>
> > >>  > >>  Before, this macro would take a few parameters to be used as  
> > >> sleep  
> > >>  > >> and
> > >>  > >>  runtime callbacks. This made it unsuitable to use with  
> > >> different  
> > >>  > >>  callbacks, for instance the "noirq" ones.
> > >>  > >>
> > >>  > >>  It is now semantically different: instead of creating a
> > >>  > >> conditionally
> > >>  > >>  exported dev_pm_ops structure, it only contains part of the
> > >>  > >> definition.
> > >>  > >>
> > >>  > >>  This macro should however never be used directly (hence the  
> > >> trailing  
> > >>  > >>  underscore). Instead, the following four macros are provided:
> > >>  > >>  - EXPORT_DEV_PM_OPS(name)
> > >>  > >>  - EXPORT_GPL_DEV_PM_OPS(name)
> > >>  > >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
> > >>  > >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
> > >>  > >>
> > >>  > >>  For instance, it is now possible to conditionally export noirq
> > >>  > >>  suspend/resume PM functions like this:
> > >>  > >>
> > >>  > >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
> > >>  > >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> > >>  > >>  };
> > >>  > >>
> > >>  > >>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() and
> > >>  > >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use these  
> > >> new  
> > >>  > >> macros.
> > >>  > >>
> > >>  > >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>  
> > >>  > >
> > >>  > > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> > >>  > >
> > >>  > > or please let me know if you need me to pick up this one.  
> > >>  >
> > >>  > Could you pick this one up then, and make a branch for Jonathan?  
> > >>
> > >>  Hi Paul, Rafael,
> > >>
> > >>  What happened to this in the end?  I can't immediately find it on
> > >>  any of the pm git tree branches.
> > >>
> > >>  At this stage in the cycle it would be great if this patch at least
> > >>  makes the merge window, so we can make use of it next cycle.  
> > >
> > > I thought that this would go in along with the other patches in the
> > > series.
> > >
> > > I can apply it directly, though, if needed.
> > >
> > > Thanks!  
> >
> > I think at this point Jonathan can just take it in his tree with his
> > own patchset. Then I'll rebase this patchset on v6.1-rc1.  
> 
> Sure.
> 
> Jonathan, please go ahead and take the patch directly.

Too late for me to take this for this cycle (I route via Greg KH so need to have things
in place a little bit before the merge window).  If Lee doesn't pick it up, I'll do an
immutable branch after rc1 is out with just this patch on it, then anyone who wants
it can pick it up.

Thanks,

Jonathan
Paul Cercueil Oct. 2, 2022, 11:18 a.m. UTC | #7
Le sam., oct. 1 2022 at 18:01:30 +0100, Jonathan Cameron 
<jic23@kernel.org> a écrit :
> On Mon, 26 Sep 2022 15:35:35 +0200
> "Rafael J. Wysocki" <rafael@kernel.org> wrote:
> 
>>  On Mon, Sep 26, 2022 at 3:27 PM Paul Cercueil 
>> <paul@crapouillou.net> wrote:
>>  >
>>  > Hi,
>>  >
>>  > Le lun., sept. 26 2022 at 14:00:52 +0200, Rafael J. Wysocki
>>  > <rafael@kernel.org> a écrit :
>>  > > On Sun, Sep 25, 2022 at 4:52 PM Jonathan Cameron 
>> <jic23@kernel.org>
>>  > > wrote:
>>  > >>
>>  > >>  On Thu, 25 Aug 2022 23:42:53 +0100
>>  > >>  Paul Cercueil <paul@crapouillou.net> wrote:
>>  > >>
>>  > >>  > Hi Rafael,
>>  > >>  >
>>  > >>  > Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki
>>  > >>  > <rafael@kernel.org> a écrit :
>>  > >>  > > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil
>>  > >> <paul@crapouillou.net>
>>  > >>  > > wrote:
>>  > >>  > >>
>>  > >>  > >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was 
>> not
>>  > >> used
>>  > >>  > >> anywhere
>>  > >>  > >>  outside pm.h and pm_runtime.h, so it is safe to update 
>> it.
>>  > >>  > >>
>>  > >>  > >>  Before, this macro would take a few parameters to be 
>> used as
>>  > >> sleep
>>  > >>  > >> and
>>  > >>  > >>  runtime callbacks. This made it unsuitable to use with
>>  > >> different
>>  > >>  > >>  callbacks, for instance the "noirq" ones.
>>  > >>  > >>
>>  > >>  > >>  It is now semantically different: instead of creating a
>>  > >>  > >> conditionally
>>  > >>  > >>  exported dev_pm_ops structure, it only contains part of 
>> the
>>  > >>  > >> definition.
>>  > >>  > >>
>>  > >>  > >>  This macro should however never be used directly (hence 
>> the
>>  > >> trailing
>>  > >>  > >>  underscore). Instead, the following four macros are 
>> provided:
>>  > >>  > >>  - EXPORT_DEV_PM_OPS(name)
>>  > >>  > >>  - EXPORT_GPL_DEV_PM_OPS(name)
>>  > >>  > >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
>>  > >>  > >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
>>  > >>  > >>
>>  > >>  > >>  For instance, it is now possible to conditionally 
>> export noirq
>>  > >>  > >>  suspend/resume PM functions like this:
>>  > >>  > >>
>>  > >>  > >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
>>  > >>  > >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
>>  > >>  > >>  };
>>  > >>  > >>
>>  > >>  > >>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS() 
>> and
>>  > >>  > >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use 
>> these
>>  > >> new
>>  > >>  > >> macros.
>>  > >>  > >>
>>  > >>  > >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  > >>  > >
>>  > >>  > > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>  > >>  > >
>>  > >>  > > or please let me know if you need me to pick up this one.
>>  > >>  >
>>  > >>  > Could you pick this one up then, and make a branch for 
>> Jonathan?
>>  > >>
>>  > >>  Hi Paul, Rafael,
>>  > >>
>>  > >>  What happened to this in the end?  I can't immediately find 
>> it on
>>  > >>  any of the pm git tree branches.
>>  > >>
>>  > >>  At this stage in the cycle it would be great if this patch at 
>> least
>>  > >>  makes the merge window, so we can make use of it next cycle.
>>  > >
>>  > > I thought that this would go in along with the other patches in 
>> the
>>  > > series.
>>  > >
>>  > > I can apply it directly, though, if needed.
>>  > >
>>  > > Thanks!
>>  >
>>  > I think at this point Jonathan can just take it in his tree with 
>> his
>>  > own patchset. Then I'll rebase this patchset on v6.1-rc1.
>> 
>>  Sure.
>> 
>>  Jonathan, please go ahead and take the patch directly.
> 
> Too late for me to take this for this cycle (I route via Greg KH so 
> need to have things
> in place a little bit before the merge window).  If Lee doesn't pick 
> it up, I'll do an
> immutable branch after rc1 is out with just this patch on it, then 
> anyone who wants
> it can pick it up.

Rafael or Lee, can you take it now?

Or is it already too late? :(

-Paul
Rafael J. Wysocki Oct. 4, 2022, 6:54 p.m. UTC | #8
On Sun, Oct 2, 2022 at 1:18 PM Paul Cercueil <paul@crapouillou.net> wrote:
>
>
>
> Le sam., oct. 1 2022 at 18:01:30 +0100, Jonathan Cameron
> <jic23@kernel.org> a écrit :
> > On Mon, 26 Sep 2022 15:35:35 +0200
> > "Rafael J. Wysocki" <rafael@kernel.org> wrote:
> >
> >>  On Mon, Sep 26, 2022 at 3:27 PM Paul Cercueil
> >> <paul@crapouillou.net> wrote:
> >>  >
> >>  > Hi,
> >>  >
> >>  > Le lun., sept. 26 2022 at 14:00:52 +0200, Rafael J. Wysocki
> >>  > <rafael@kernel.org> a écrit :
> >>  > > On Sun, Sep 25, 2022 at 4:52 PM Jonathan Cameron
> >> <jic23@kernel.org>
> >>  > > wrote:
> >>  > >>
> >>  > >>  On Thu, 25 Aug 2022 23:42:53 +0100
> >>  > >>  Paul Cercueil <paul@crapouillou.net> wrote:
> >>  > >>
> >>  > >>  > Hi Rafael,
> >>  > >>  >
> >>  > >>  > Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. Wysocki
> >>  > >>  > <rafael@kernel.org> a écrit :
> >>  > >>  > > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil
> >>  > >> <paul@crapouillou.net>
> >>  > >>  > > wrote:
> >>  > >>  > >>
> >>  > >>  > >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It was
> >> not
> >>  > >> used
> >>  > >>  > >> anywhere
> >>  > >>  > >>  outside pm.h and pm_runtime.h, so it is safe to update
> >> it.
> >>  > >>  > >>
> >>  > >>  > >>  Before, this macro would take a few parameters to be
> >> used as
> >>  > >> sleep
> >>  > >>  > >> and
> >>  > >>  > >>  runtime callbacks. This made it unsuitable to use with
> >>  > >> different
> >>  > >>  > >>  callbacks, for instance the "noirq" ones.
> >>  > >>  > >>
> >>  > >>  > >>  It is now semantically different: instead of creating a
> >>  > >>  > >> conditionally
> >>  > >>  > >>  exported dev_pm_ops structure, it only contains part of
> >> the
> >>  > >>  > >> definition.
> >>  > >>  > >>
> >>  > >>  > >>  This macro should however never be used directly (hence
> >> the
> >>  > >> trailing
> >>  > >>  > >>  underscore). Instead, the following four macros are
> >> provided:
> >>  > >>  > >>  - EXPORT_DEV_PM_OPS(name)
> >>  > >>  > >>  - EXPORT_GPL_DEV_PM_OPS(name)
> >>  > >>  > >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
> >>  > >>  > >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
> >>  > >>  > >>
> >>  > >>  > >>  For instance, it is now possible to conditionally
> >> export noirq
> >>  > >>  > >>  suspend/resume PM functions like this:
> >>  > >>  > >>
> >>  > >>  > >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
> >>  > >>  > >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
> >>  > >>  > >>  };
> >>  > >>  > >>
> >>  > >>  > >>  The existing helper macros EXPORT_*_SIMPLE_DEV_PM_OPS()
> >> and
> >>  > >>  > >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to use
> >> these
> >>  > >> new
> >>  > >>  > >> macros.
> >>  > >>  > >>
> >>  > >>  > >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> >>  > >>  > >
> >>  > >>  > > Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >>  > >>  > >
> >>  > >>  > > or please let me know if you need me to pick up this one.
> >>  > >>  >
> >>  > >>  > Could you pick this one up then, and make a branch for
> >> Jonathan?
> >>  > >>
> >>  > >>  Hi Paul, Rafael,
> >>  > >>
> >>  > >>  What happened to this in the end?  I can't immediately find
> >> it on
> >>  > >>  any of the pm git tree branches.
> >>  > >>
> >>  > >>  At this stage in the cycle it would be great if this patch at
> >> least
> >>  > >>  makes the merge window, so we can make use of it next cycle.
> >>  > >
> >>  > > I thought that this would go in along with the other patches in
> >> the
> >>  > > series.
> >>  > >
> >>  > > I can apply it directly, though, if needed.
> >>  > >
> >>  > > Thanks!
> >>  >
> >>  > I think at this point Jonathan can just take it in his tree with
> >> his
> >>  > own patchset. Then I'll rebase this patchset on v6.1-rc1.
> >>
> >>  Sure.
> >>
> >>  Jonathan, please go ahead and take the patch directly.
> >
> > Too late for me to take this for this cycle (I route via Greg KH so
> > need to have things
> > in place a little bit before the merge window).  If Lee doesn't pick
> > it up, I'll do an
> > immutable branch after rc1 is out with just this patch on it, then
> > anyone who wants
> > it can pick it up.
>
> Rafael or Lee, can you take it now?
>
> Or is it already too late? :(

I've applied this patch as 6.1-rc material, thanks!
Paul Cercueil Oct. 4, 2022, 7:12 p.m. UTC | #9
Le mar., oct. 4 2022 at 20:54:28 +0200, Rafael J. Wysocki 
<rafael@kernel.org> a écrit :
> On Sun, Oct 2, 2022 at 1:18 PM Paul Cercueil <paul@crapouillou.net> 
> wrote:
>> 
>> 
>> 
>>  Le sam., oct. 1 2022 at 18:01:30 +0100, Jonathan Cameron
>>  <jic23@kernel.org> a écrit :
>>  > On Mon, 26 Sep 2022 15:35:35 +0200
>>  > "Rafael J. Wysocki" <rafael@kernel.org> wrote:
>>  >
>>  >>  On Mon, Sep 26, 2022 at 3:27 PM Paul Cercueil
>>  >> <paul@crapouillou.net> wrote:
>>  >>  >
>>  >>  > Hi,
>>  >>  >
>>  >>  > Le lun., sept. 26 2022 at 14:00:52 +0200, Rafael J. Wysocki
>>  >>  > <rafael@kernel.org> a écrit :
>>  >>  > > On Sun, Sep 25, 2022 at 4:52 PM Jonathan Cameron
>>  >> <jic23@kernel.org>
>>  >>  > > wrote:
>>  >>  > >>
>>  >>  > >>  On Thu, 25 Aug 2022 23:42:53 +0100
>>  >>  > >>  Paul Cercueil <paul@crapouillou.net> wrote:
>>  >>  > >>
>>  >>  > >>  > Hi Rafael,
>>  >>  > >>  >
>>  >>  > >>  > Le mar., août 23 2022 at 19:47:57 +0200, Rafael J. 
>> Wysocki
>>  >>  > >>  > <rafael@kernel.org> a écrit :
>>  >>  > >>  > > On Mon, Aug 8, 2022 at 7:41 PM Paul Cercueil
>>  >>  > >> <paul@crapouillou.net>
>>  >>  > >>  > > wrote:
>>  >>  > >>  > >>
>>  >>  > >>  > >>  Update the _EXPORT_DEV_PM_OPS() internal macro. It 
>> was
>>  >> not
>>  >>  > >> used
>>  >>  > >>  > >> anywhere
>>  >>  > >>  > >>  outside pm.h and pm_runtime.h, so it is safe to 
>> update
>>  >> it.
>>  >>  > >>  > >>
>>  >>  > >>  > >>  Before, this macro would take a few parameters to be
>>  >> used as
>>  >>  > >> sleep
>>  >>  > >>  > >> and
>>  >>  > >>  > >>  runtime callbacks. This made it unsuitable to use 
>> with
>>  >>  > >> different
>>  >>  > >>  > >>  callbacks, for instance the "noirq" ones.
>>  >>  > >>  > >>
>>  >>  > >>  > >>  It is now semantically different: instead of 
>> creating a
>>  >>  > >>  > >> conditionally
>>  >>  > >>  > >>  exported dev_pm_ops structure, it only contains 
>> part of
>>  >> the
>>  >>  > >>  > >> definition.
>>  >>  > >>  > >>
>>  >>  > >>  > >>  This macro should however never be used directly 
>> (hence
>>  >> the
>>  >>  > >> trailing
>>  >>  > >>  > >>  underscore). Instead, the following four macros are
>>  >> provided:
>>  >>  > >>  > >>  - EXPORT_DEV_PM_OPS(name)
>>  >>  > >>  > >>  - EXPORT_GPL_DEV_PM_OPS(name)
>>  >>  > >>  > >>  - EXPORT_NS_DEV_PM_OPS(name, ns)
>>  >>  > >>  > >>  - EXPORT_NS_GPL_DEV_PM_OPS(name, ns)
>>  >>  > >>  > >>
>>  >>  > >>  > >>  For instance, it is now possible to conditionally
>>  >> export noirq
>>  >>  > >>  > >>  suspend/resume PM functions like this:
>>  >>  > >>  > >>
>>  >>  > >>  > >>  EXPORT_GPL_DEV_PM_OPS(foo_pm_ops) = {
>>  >>  > >>  > >>      NOIRQ_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn)
>>  >>  > >>  > >>  };
>>  >>  > >>  > >>
>>  >>  > >>  > >>  The existing helper macros 
>> EXPORT_*_SIMPLE_DEV_PM_OPS()
>>  >> and
>>  >>  > >>  > >>  EXPORT_*_RUNTIME_DEV_PM_OPS() have been updated to 
>> use
>>  >> these
>>  >>  > >> new
>>  >>  > >>  > >> macros.
>>  >>  > >>  > >>
>>  >>  > >>  > >>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  >>  > >>  > >
>>  >>  > >>  > > Acked-by: Rafael J. Wysocki 
>> <rafael.j.wysocki@intel.com>
>>  >>  > >>  > >
>>  >>  > >>  > > or please let me know if you need me to pick up this 
>> one.
>>  >>  > >>  >
>>  >>  > >>  > Could you pick this one up then, and make a branch for
>>  >> Jonathan?
>>  >>  > >>
>>  >>  > >>  Hi Paul, Rafael,
>>  >>  > >>
>>  >>  > >>  What happened to this in the end?  I can't immediately 
>> find
>>  >> it on
>>  >>  > >>  any of the pm git tree branches.
>>  >>  > >>
>>  >>  > >>  At this stage in the cycle it would be great if this 
>> patch at
>>  >> least
>>  >>  > >>  makes the merge window, so we can make use of it next 
>> cycle.
>>  >>  > >
>>  >>  > > I thought that this would go in along with the other 
>> patches in
>>  >> the
>>  >>  > > series.
>>  >>  > >
>>  >>  > > I can apply it directly, though, if needed.
>>  >>  > >
>>  >>  > > Thanks!
>>  >>  >
>>  >>  > I think at this point Jonathan can just take it in his tree 
>> with
>>  >> his
>>  >>  > own patchset. Then I'll rebase this patchset on v6.1-rc1.
>>  >>
>>  >>  Sure.
>>  >>
>>  >>  Jonathan, please go ahead and take the patch directly.
>>  >
>>  > Too late for me to take this for this cycle (I route via Greg KH 
>> so
>>  > need to have things
>>  > in place a little bit before the merge window).  If Lee doesn't 
>> pick
>>  > it up, I'll do an
>>  > immutable branch after rc1 is out with just this patch on it, then
>>  > anyone who wants
>>  > it can pick it up.
>> 
>>  Rafael or Lee, can you take it now?
>> 
>>  Or is it already too late? :(
> 
> I've applied this patch as 6.1-rc material, thanks!

Awesome, thanks!

-Paul
diff mbox series

Patch

diff --git a/include/linux/pm.h b/include/linux/pm.h
index 871c9c49ec9d..93cd34f00822 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -375,19 +375,20 @@  const struct dev_pm_ops name = { \
 }
 
 #ifdef CONFIG_PM
-#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
-			   runtime_resume_fn, idle_fn, sec, ns)		\
-	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
-			   runtime_resume_fn, idle_fn); \
-	__EXPORT_SYMBOL(name, sec, ns)
+#define _EXPORT_DEV_PM_OPS(name, sec, ns)				\
+	const struct dev_pm_ops name;					\
+	__EXPORT_SYMBOL(name, sec, ns);					\
+	const struct dev_pm_ops name
 #else
-#define _EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, runtime_suspend_fn, \
-			   runtime_resume_fn, idle_fn, sec, ns) \
-static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
-					 resume_fn, runtime_suspend_fn, \
-					 runtime_resume_fn, idle_fn)
+#define _EXPORT_DEV_PM_OPS(name, sec, ns)				\
+	static __maybe_unused const struct dev_pm_ops __static_##name
 #endif
 
+#define EXPORT_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "", "")
+#define EXPORT_GPL_DEV_PM_OPS(name) _EXPORT_DEV_PM_OPS(name, "_gpl", "")
+#define EXPORT_NS_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "", #ns)
+#define EXPORT_NS_GPL_DEV_PM_OPS(name, ns) _EXPORT_DEV_PM_OPS(name, "_gpl", #ns)
+
 /*
  * Use this if you want to use the same suspend and resume callbacks for suspend
  * to RAM and hibernation.
@@ -399,13 +400,21 @@  static __maybe_unused _DEFINE_DEV_PM_OPS(__static_##name, suspend_fn, \
 	_DEFINE_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL)
 
 #define EXPORT_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
-	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", "")
+	EXPORT_DEV_PM_OPS(name) = { \
+		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+	}
 #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", "")
+	EXPORT_GPL_DEV_PM_OPS(name) = { \
+		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+	}
 #define EXPORT_NS_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)	\
-	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "", #ns)
+	EXPORT_NS_DEV_PM_OPS(name, ns) = { \
+		SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
+	}
 #define EXPORT_NS_GPL_SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn, ns)	\
-	_EXPORT_DEV_PM_OPS(name, suspend_fn, resume_fn, NULL, NULL, NULL, "_gpl", #ns)
+	EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
+		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) \
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
index 9e4d056967c6..ba2077d9e366 100644
--- a/include/linux/pm_runtime.h
+++ b/include/linux/pm_runtime.h
@@ -40,17 +40,21 @@ 
 			   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, "", "")
+	EXPORT_DEV_PM_OPS(name) = { \
+		RUNTIME_PM_OPS(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", "")
+	EXPORT_GPL_DEV_PM_OPS(name) = { \
+		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
+	}
 #define EXPORT_NS_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
-	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
-			   suspend_fn, resume_fn, idle_fn, "", #ns)
+	EXPORT_NS_DEV_PM_OPS(name, ns) = { \
+		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
+	}
 #define EXPORT_NS_GPL_RUNTIME_DEV_PM_OPS(name, suspend_fn, resume_fn, idle_fn, ns) \
-	_EXPORT_DEV_PM_OPS(name, pm_runtime_force_suspend, pm_runtime_force_resume, \
-			   suspend_fn, resume_fn, idle_fn, "_gpl", #ns)
+	EXPORT_NS_GPL_DEV_PM_OPS(name, ns) = { \
+		RUNTIME_PM_OPS(suspend_fn, resume_fn, idle_fn) \
+	}
 
 #ifdef CONFIG_PM
 extern struct workqueue_struct *pm_wq;