Messages in this thread | | | Date | Thu, 25 Aug 2022 23:42:53 +0100 | From | Paul Cercueil <> | Subject | Re: [PATCH v2 01/30] pm: Improve EXPORT_*_DEV_PM_OPS macros |
| |
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 >>
| |