Re: [PATCH 1/2] PM / sleep: Make lock/unlock_system_sleep() available to kernel modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 5, 2018 at 6:19 PM, Bart Van Assche <bart.vanassche@xxxxxxx> wrote:
> Since pm_mutex is not exported using lock/unlock_system_sleep() from
> inside a kernel module causes a "pm_mutex undefined" linker error.
> Hence move lock/unlock_system_sleep() into kernel/power/main.c and
> export these.
>
> Signed-off-by: Bart Van Assche <bart.vanassche@xxxxxxx>
> Cc: Rafael J. Wysocki <rjw@xxxxxxxxxxxxx>
> ---
>  include/linux/suspend.h | 28 ++--------------------------
>  kernel/power/main.c     | 29 +++++++++++++++++++++++++++++
>  2 files changed, 31 insertions(+), 26 deletions(-)
>
> diff --git a/include/linux/suspend.h b/include/linux/suspend.h
> index d60b0f5c38d5..cc22a24516d6 100644
> --- a/include/linux/suspend.h
> +++ b/include/linux/suspend.h
> @@ -443,32 +443,8 @@ extern bool pm_save_wakeup_count(unsigned int count);
>  extern void pm_wakep_autosleep_enabled(bool set);
>  extern void pm_print_active_wakeup_sources(void);
>
> -static inline void lock_system_sleep(void)
> -{
> -       current->flags |= PF_FREEZER_SKIP;
> -       mutex_lock(&pm_mutex);
> -}
> -
> -static inline void unlock_system_sleep(void)
> -{
> -       /*
> -        * Don't use freezer_count() because we don't want the call to
> -        * try_to_freeze() here.
> -        *
> -        * Reason:
> -        * Fundamentally, we just don't need it, because freezing condition
> -        * doesn't come into effect until we release the pm_mutex lock,
> -        * since the freezer always works with pm_mutex held.
> -        *
> -        * More importantly, in the case of hibernation,
> -        * unlock_system_sleep() gets called in snapshot_read() and
> -        * snapshot_write() when the freezing condition is still in effect.
> -        * Which means, if we use try_to_freeze() here, it would make them
> -        * enter the refrigerator, thus causing hibernation to lockup.
> -        */
> -       current->flags &= ~PF_FREEZER_SKIP;
> -       mutex_unlock(&pm_mutex);
> -}
> +extern void lock_system_sleep(void);
> +extern void unlock_system_sleep(void);
>
>  #else /* !CONFIG_PM_SLEEP */

Don't you need to add stubs for this case too?

> diff --git a/kernel/power/main.c b/kernel/power/main.c
> index 3a2ca9066583..705c2366dafe 100644
> --- a/kernel/power/main.c
> +++ b/kernel/power/main.c
> @@ -22,6 +22,35 @@ DEFINE_MUTEX(pm_mutex);
>
>  #ifdef CONFIG_PM_SLEEP
>
> +void lock_system_sleep(void)
> +{
> +       current->flags |= PF_FREEZER_SKIP;
> +       mutex_lock(&pm_mutex);
> +}
> +EXPORT_SYMBOL_GPL(lock_system_sleep);
> +
> +void unlock_system_sleep(void)
> +{
> +       /*
> +        * Don't use freezer_count() because we don't want the call to
> +        * try_to_freeze() here.
> +        *
> +        * Reason:
> +        * Fundamentally, we just don't need it, because freezing condition
> +        * doesn't come into effect until we release the pm_mutex lock,
> +        * since the freezer always works with pm_mutex held.
> +        *
> +        * More importantly, in the case of hibernation,
> +        * unlock_system_sleep() gets called in snapshot_read() and
> +        * snapshot_write() when the freezing condition is still in effect.
> +        * Which means, if we use try_to_freeze() here, it would make them
> +        * enter the refrigerator, thus causing hibernation to lockup.
> +        */
> +       current->flags &= ~PF_FREEZER_SKIP;
> +       mutex_unlock(&pm_mutex);
> +}
> +EXPORT_SYMBOL_GPL(unlock_system_sleep);
> +
>  /* Routines for PM-transition notifications */
>
>  static BLOCKING_NOTIFIER_HEAD(pm_chain_head);
> --

The changes are fine by me, but I really would prefer them to go in
via the PM tree which I guess means that the second patch would need
to go in this way too.

Thanks,
Rafael



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux