On Wed, 25 Jun 2025 at 21:25, Rafael J. Wysocki <rjw@xxxxxxxxxxxxx> wrote: > > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > Since pm_runtime_force_suspend/resume() and pm_runtime_need_not_resume() > are only used during system-wide PM transitions, there is no reason to > compile them in if CONFIG_PM_SLEEP is unset. > > Accordingly, move them all under CONFIG_PM_SLEEP and make the static > inline stubs for pm_runtime_force_suspend/resume() return an error > to indicate that they should not be used outside CONFIG_PM_SLEEP. > Just realized that there seems to be some drivers that actually make use of pm_runtime_force_suspend() from their ->remove() callbacks. To not break them, we probably need to leave this code to stay under CONFIG_PM. Kind regards Uffe > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > --- > drivers/base/power/runtime.c | 4 ++++ > include/linux/pm_runtime.h | 20 ++++++++++++++------ > 2 files changed, 18 insertions(+), 6 deletions(-) > > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -1941,6 +1941,8 @@ > pm_request_idle(link->supplier); > } > > +#ifdef CONFIG_PM_SLEEP > + > bool pm_runtime_need_not_resume(struct device *dev) > { > return atomic_read(&dev->power.usage_count) <= 1 && > @@ -2063,3 +2065,5 @@ > return ret; > } > EXPORT_SYMBOL_GPL(pm_runtime_force_resume); > + > +#endif /* CONFIG_PM_SLEEP */ > --- a/include/linux/pm_runtime.h > +++ b/include/linux/pm_runtime.h > @@ -66,9 +66,6 @@ > > extern int pm_generic_runtime_suspend(struct device *dev); > extern int pm_generic_runtime_resume(struct device *dev); > -extern bool pm_runtime_need_not_resume(struct device *dev); > -extern int pm_runtime_force_suspend(struct device *dev); > -extern int pm_runtime_force_resume(struct device *dev); > > extern int __pm_runtime_idle(struct device *dev, int rpmflags); > extern int __pm_runtime_suspend(struct device *dev, int rpmflags); > @@ -257,9 +254,6 @@ > > static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } > static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } > -static inline bool pm_runtime_need_not_resume(struct device *dev) {return true; } > -static inline int pm_runtime_force_suspend(struct device *dev) { return 0; } > -static inline int pm_runtime_force_resume(struct device *dev) { return 0; } > > static inline int __pm_runtime_idle(struct device *dev, int rpmflags) > { > @@ -330,6 +324,20 @@ > > #endif /* !CONFIG_PM */ > > +#ifdef CONFIG_PM_SLEEP > + > +extern bool pm_runtime_need_not_resume(struct device *dev); > +extern int pm_runtime_force_suspend(struct device *dev); > +extern int pm_runtime_force_resume(struct device *dev); > + > +#else /* !CONFIG_PM_SLEEP */ > + > +static inline bool pm_runtime_need_not_resume(struct device *dev) {return true; } > +static inline int pm_runtime_force_suspend(struct device *dev) { return -ENXIO; } > +static inline int pm_runtime_force_resume(struct device *dev) { return -ENXIO; } > + > +#endif /* CONFIG_PM_SLEEP */ > + > /** > * pm_runtime_idle - Conditionally set up autosuspend of a device or suspend it. > * @dev: Target device. > > >