PM / Sleep: Do not check wakeup too often in try_to_freeze_tasks()
authorRafael J. Wysocki <rjw@sisk.pl>
Fri, 10 Feb 2012 23:00:34 +0000 (00:00 +0100)
committerRafael J. Wysocki <rjw@sisk.pl>
Mon, 13 Feb 2012 15:26:05 +0000 (16:26 +0100)
Use the observation that it is more efficient to check the wakeup
variable once before the loop reporting tasks that were not
frozen in try_to_freeze_tasks() than to do that in every step of that
loop.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
kernel/power/process.c

index 7e42645..6aeb5ef 100644 (file)
@@ -98,13 +98,15 @@ static int try_to_freeze_tasks(bool user_only)
                       elapsed_csecs / 100, elapsed_csecs % 100,
                       todo - wq_busy, wq_busy);
 
-               read_lock(&tasklist_lock);
-               do_each_thread(g, p) {
-                       if (!wakeup && !freezer_should_skip(p) &&
-                           p != current && freezing(p) && !frozen(p))
-                               sched_show_task(p);
-               } while_each_thread(g, p);
-               read_unlock(&tasklist_lock);
+               if (!wakeup) {
+                       read_lock(&tasklist_lock);
+                       do_each_thread(g, p) {
+                               if (p != current && !freezer_should_skip(p)
+                                   && freezing(p) && !frozen(p))
+                                       sched_show_task(p);
+                       } while_each_thread(g, p);
+                       read_unlock(&tasklist_lock);
+               }
        } else {
                printk("(elapsed %d.%02d seconds) ", elapsed_csecs / 100,
                        elapsed_csecs % 100);