[Suspend2][ 1/2] [Suspend2] Disable load updating during suspending.

From: Nigel Cunningham
Date: Mon Jun 26 2006 - 12:37:57 EST


Suspend2 uses the cpu very intensively, with the result that the load
average can be quite high when a cycle has just completed. This in turn can
cause problems with mail delivery and other activities that suspend
activities when the load average gets too high. To avoid this, we suspend
updates of the load average while the freezer is on.

Signed-off-by: Nigel Cunningham <nigel@xxxxxxxxxxxx>

kernel/timer.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/kernel/timer.c b/kernel/timer.c
index 9e49dee..44a17fc 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -34,6 +34,7 @@
#include <linux/cpu.h>
#include <linux/syscalls.h>
#include <linux/delay.h>
+#include <linux/freezer.h>

#include <asm/uaccess.h>
#include <asm/unistd.h>
@@ -869,6 +870,16 @@ static inline void calc_load(unsigned lo
count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
+
+ /* Suspend2 does a lot of work (pagecache I/O) before
+ * and after the atomic copy. If we let the load average
+ * be updated while suspending, it will be very high post
+ * resume. Processes such as some MTAs that stop work
+ * while the average is high will be unnecessarily disrupted.
+ */
+ if (freezer_is_on())
+ return;
+
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);

--
Nigel Cunningham nigel at suspend2 dot net
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/