diff options
| author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2025-07-17 19:55:25 +0200 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2025-07-17 19:55:25 +0200 |
| commit | 7c1f7c22e69fae209eaad58de2627b8b5acb3cb3 (patch) | |
| tree | 045bdc9025e68539080660073e661911e3b20406 /kernel/power | |
| parent | PM: sleep: Update power.completion for all devices on errors (diff) | |
| parent | kexec_core: Drop redundant pm_restore_gfp_mask() call (diff) | |
| download | linux-7c1f7c22e69fae209eaad58de2627b8b5acb3cb3.tar.gz linux-7c1f7c22e69fae209eaad58de2627b8b5acb3cb3.zip | |
Merge back earlier material related to system sleep
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/console.c | 7 | ||||
| -rw-r--r-- | kernel/power/main.c | 9 |
2 files changed, 15 insertions, 1 deletions
diff --git a/kernel/power/console.c b/kernel/power/console.c index fcdf0e14a47d..19c48aa5355d 100644 --- a/kernel/power/console.c +++ b/kernel/power/console.c @@ -16,6 +16,7 @@ #define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1) static int orig_fgconsole, orig_kmsg; +static bool vt_switch_done; static DEFINE_MUTEX(vt_switch_mutex); @@ -136,17 +137,21 @@ void pm_prepare_console(void) if (orig_fgconsole < 0) return; + vt_switch_done = true; + orig_kmsg = vt_kmsg_redirect(SUSPEND_CONSOLE); return; } void pm_restore_console(void) { - if (!pm_vt_switch()) + if (!pm_vt_switch() && !vt_switch_done) return; if (orig_fgconsole >= 0) { vt_move_to_console(orig_fgconsole, 0); vt_kmsg_redirect(orig_kmsg); } + + vt_switch_done = false; } diff --git a/kernel/power/main.c b/kernel/power/main.c index 3d484630505a..3cf2d7e72567 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -8,6 +8,7 @@ #include <linux/acpi.h> #include <linux/export.h> +#include <linux/init.h> #include <linux/kobject.h> #include <linux/string.h> #include <linux/pm-trace.h> @@ -112,6 +113,14 @@ int pm_notifier_call_chain(unsigned long val) /* If set, devices may be suspended and resumed asynchronously. */ int pm_async_enabled = 1; +static int __init pm_async_setup(char *str) +{ + if (!strcmp(str, "off")) + pm_async_enabled = 0; + return 1; +} +__setup("pm_async=", pm_async_setup); + static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { |
