Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be404f02 authored by Tejun Heo's avatar Tejun Heo Committed by Rafael J. Wysocki
Browse files

PM / freezer: Don't get over-anxious while waiting



Freezing isn't exactly the most latency sensitive operation and
there's no reason to burn cpu cycles and power waiting for it to
complete.  msleep(10) instead of yield().  This should improve
reliability of emergency hibernation.

[rjw: Modified the comment next to the msleep(10).]

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
parent 964fe080
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/syscalls.h>
#include <linux/freezer.h>
#include <linux/delay.h>

/* 
 * Timeout for stopping processes
@@ -41,7 +42,7 @@ static int try_to_freeze_tasks(bool sig_only)
	do_gettimeofday(&start);

	end_time = jiffies + TIMEOUT;
	do {
	while (true) {
		todo = 0;
		read_lock(&tasklist_lock);
		do_each_thread(g, p) {
@@ -62,10 +63,15 @@ static int try_to_freeze_tasks(bool sig_only)
				todo++;
		} while_each_thread(g, p);
		read_unlock(&tasklist_lock);
		yield();			/* Yield is okay here */
		if (time_after(jiffies, end_time))
		if (!todo || time_after(jiffies, end_time))
			break;
	} while (todo);

		/*
		 * We need to retry, but first give the freezing tasks some
		 * time to enter the regrigerator.
		 */
		msleep(10);
	}

	do_gettimeofday(&end);
	elapsed_csecs64 = timeval_to_ns(&end) - timeval_to_ns(&start);