]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Feb 2023 15:12:24 +0000 (16:12 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Feb 2023 15:12:24 +0000 (16:12 +0100)
added patches:
pm-sleep-avoid-using-pr_cont-in-the-tasks-freezing-code.patch

queue-6.1/pm-sleep-avoid-using-pr_cont-in-the-tasks-freezing-code.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/pm-sleep-avoid-using-pr_cont-in-the-tasks-freezing-code.patch b/queue-6.1/pm-sleep-avoid-using-pr_cont-in-the-tasks-freezing-code.patch
new file mode 100644 (file)
index 0000000..8fce02e
--- /dev/null
@@ -0,0 +1,102 @@
+From a449dfbfc0894676ad0aa1873383265047529e3a Mon Sep 17 00:00:00 2001
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+Date: Thu, 1 Dec 2022 19:33:09 +0100
+Subject: PM: sleep: Avoid using pr_cont() in the tasks freezing code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+
+commit a449dfbfc0894676ad0aa1873383265047529e3a upstream.
+
+Using pr_cont() in the tasks freezing code related to system-wide
+suspend and hibernation is problematic, because the continuation
+messages printed there are susceptible to interspersing with other
+unrelated messages which results in output that is hard to
+understand.
+
+Address this issue by modifying try_to_freeze_tasks() to print
+messages that don't require continuations and adjusting its
+callers accordingly.
+
+Reported-by: Thomas Weißschuh <linux@weissschuh.net>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Reviewed-by: Petr Mladek <pmladek@suse.com>
+Cc: Paul Menzel <pmenzel@molgen.mpg.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/power/process.c |   21 ++++++++-------------
+ 1 file changed, 8 insertions(+), 13 deletions(-)
+
+--- a/kernel/power/process.c
++++ b/kernel/power/process.c
+@@ -27,6 +27,8 @@ unsigned int __read_mostly freeze_timeou
+ static int try_to_freeze_tasks(bool user_only)
+ {
++      const char *what = user_only ? "user space processes" :
++                                      "remaining freezable tasks";
+       struct task_struct *g, *p;
+       unsigned long end_time;
+       unsigned int todo;
+@@ -36,6 +38,8 @@ static int try_to_freeze_tasks(bool user
+       bool wakeup = false;
+       int sleep_usecs = USEC_PER_MSEC;
++      pr_info("Freezing %s\n", what);
++
+       start = ktime_get_boottime();
+       end_time = jiffies + msecs_to_jiffies(freeze_timeout_msecs);
+@@ -82,7 +86,6 @@ static int try_to_freeze_tasks(bool user
+       elapsed_msecs = ktime_to_ms(elapsed);
+       if (todo) {
+-              pr_cont("\n");
+               pr_err("Freezing of tasks %s after %d.%03d seconds "
+                      "(%d tasks refusing to freeze, wq_busy=%d):\n",
+                      wakeup ? "aborted" : "failed",
+@@ -101,8 +104,8 @@ static int try_to_freeze_tasks(bool user
+                       read_unlock(&tasklist_lock);
+               }
+       } else {
+-              pr_cont("(elapsed %d.%03d seconds) ", elapsed_msecs / 1000,
+-                      elapsed_msecs % 1000);
++              pr_info("Freezing %s completed (elapsed %d.%03d seconds)\n",
++                      what, elapsed_msecs / 1000, elapsed_msecs % 1000);
+       }
+       return todo ? -EBUSY : 0;
+@@ -130,14 +133,11 @@ int freeze_processes(void)
+               static_branch_inc(&freezer_active);
+       pm_wakeup_clear(0);
+-      pr_info("Freezing user space processes ... ");
+       pm_freezing = true;
+       error = try_to_freeze_tasks(true);
+-      if (!error) {
++      if (!error)
+               __usermodehelper_set_disable_depth(UMH_DISABLED);
+-              pr_cont("done.");
+-      }
+-      pr_cont("\n");
++
+       BUG_ON(in_atomic());
+       /*
+@@ -166,14 +166,9 @@ int freeze_kernel_threads(void)
+ {
+       int error;
+-      pr_info("Freezing remaining freezable tasks ... ");
+-
+       pm_nosig_freezing = true;
+       error = try_to_freeze_tasks(false);
+-      if (!error)
+-              pr_cont("done.");
+-      pr_cont("\n");
+       BUG_ON(in_atomic());
+       if (error)
index 34bbf9ed52bb908540f00da4f4db8dd012e1cebb..848b2adfd7dfd6ae309b2a32a8b15bd9aae693e5 100644 (file)
@@ -22,3 +22,4 @@ hid-ignore-battery-for-elan-touchscreen-29df-on-hp.patch
 selftests-ocelot-tc_flower_chains-make-test_vlan_ing.patch
 x86-cpu-add-lunar-lake-m.patch
 drm-amd-display-disable-s-g-display-on-dcn-3.1.2-3.patch
+pm-sleep-avoid-using-pr_cont-in-the-tasks-freezing-code.patch