mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-23 16:53:58 -05:00
pm/sleep: Add PM_USERSPACE_AUTOSLEEP Kconfig
Systems that initiate frequent suspend/resume from userspace can make the kernel aware by enabling PM_USERSPACE_AUTOSLEEP config. This allows for certain sleep-sensitive code (wireguard/rng) to decide on what preparatory work should be performed (or not) in their pm_notification callbacks. This patch was prompted by the discussion at [1] which attempts to remove CONFIG_ANDROID that currently guards these code paths. [1] https://lore.kernel.org/r/20220629150102.1582425-1-hch@lst.de/ Suggested-by: Jason A. Donenfeld <Jason@zx2c4.com> Acked-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Kalesh Singh <kaleshsingh@google.com> Link: https://lore.kernel.org/r/20220630191230.235306-1-kaleshsingh@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
80fc671bcc
commit
261e224d6a
3 changed files with 24 additions and 3 deletions
|
@ -755,8 +755,8 @@ static int random_pm_notification(struct notifier_block *nb, unsigned long actio
|
|||
spin_unlock_irqrestore(&input_pool.lock, flags);
|
||||
|
||||
if (crng_ready() && (action == PM_RESTORE_PREPARE ||
|
||||
(action == PM_POST_SUSPEND &&
|
||||
!IS_ENABLED(CONFIG_PM_AUTOSLEEP) && !IS_ENABLED(CONFIG_ANDROID)))) {
|
||||
(action == PM_POST_SUSPEND && !IS_ENABLED(CONFIG_PM_AUTOSLEEP) &&
|
||||
!IS_ENABLED(CONFIG_PM_USERSPACE_AUTOSLEEP)))) {
|
||||
crng_reseed();
|
||||
pr_notice("crng reseeded on system resumption\n");
|
||||
}
|
||||
|
|
|
@ -69,7 +69,8 @@ static int wg_pm_notification(struct notifier_block *nb, unsigned long action, v
|
|||
* its normal operation rather than as a somewhat rare event, then we
|
||||
* don't actually want to clear keys.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_PM_AUTOSLEEP) || IS_ENABLED(CONFIG_ANDROID))
|
||||
if (IS_ENABLED(CONFIG_PM_AUTOSLEEP) ||
|
||||
IS_ENABLED(CONFIG_PM_USERSPACE_AUTOSLEEP))
|
||||
return 0;
|
||||
|
||||
if (action != PM_HIBERNATION_PREPARE && action != PM_SUSPEND_PREPARE)
|
||||
|
|
|
@ -143,6 +143,26 @@ config PM_AUTOSLEEP
|
|||
Allow the kernel to trigger a system transition into a global sleep
|
||||
state automatically whenever there are no active wakeup sources.
|
||||
|
||||
config PM_USERSPACE_AUTOSLEEP
|
||||
bool "Userspace opportunistic sleep"
|
||||
depends on PM_SLEEP
|
||||
help
|
||||
Notify kernel of aggressive userspace autosleep power management policy.
|
||||
|
||||
This option changes the behavior of various sleep-sensitive code to deal
|
||||
with frequent userspace-initiated transitions into a global sleep state.
|
||||
|
||||
Saying Y here, disables code paths that most users really should keep
|
||||
enabled. In particular, only enable this if it is very common to be
|
||||
asleep/awake for very short periods of time (<= 2 seconds).
|
||||
|
||||
Only platforms, such as Android, that implement opportunistic sleep from
|
||||
a userspace power manager service should enable this option; and not
|
||||
other machines. Therefore, you should say N here, unless you are
|
||||
extremely certain that this is what you want. The option otherwise has
|
||||
bad, undesirable effects, and should not be enabled just for fun.
|
||||
|
||||
|
||||
config PM_WAKELOCKS
|
||||
bool "User space wakeup sources interface"
|
||||
depends on PM_SLEEP
|
||||
|
|
Loading…
Add table
Reference in a new issue