On Thu, 26 Jun 2025 at 11:41, Rafael J. Wysocki <rafael@xxxxxxxxxx> wrote: > > On Thu, Jun 26, 2025 at 11:38 AM Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > > 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. > > OK, pm_runtime_force_suspend() need not be under CONFIG_PM_SLEEP. > That's not the case for the other two functions though AFAICS. Right, but maybe better to keep them to avoid confusion? At least the corresponding flag is needed. 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. > > > > > > > > > > >