Messages in this thread |  | | From | "Rafael J. Wysocki" <> | Date | Tue, 23 Aug 2022 19:47:57 +0200 | Subject | Re: [PATCH v2 01/30] pm: Improve EXPORT_*_DEV_PM_OPS macros |
| |
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 >
|  |