public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: pm list <linux-pm@lists.linux-foundation.org>
Cc: Wu Fengguang <fengguang.wu@intel.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>, Pavel Machek <pavel@ucw.cz>,
	Nigel Cunningham <nigel@tuxonice.net>
Subject: [RFC][PATCH 1/5] PM/Freezer: Disable OOM killer when tasks are frozen
Date: Thu, 7 May 2009 00:41:04 +0200	[thread overview]
Message-ID: <200905070041.04787.rjw@sisk.pl> (raw)
In-Reply-To: <200905070040.08561.rjw@sisk.pl>

From: Rafael J. Wysocki <rjw@sisk.pl>

The OOM killer is not really going to work while tasks are frozen, so
we can just give up calling it in that case.

This will allow us to safely use memory allocations for decreasing
the number of saveable pages in the hibernation core code instead of
using any artificial memory shriking mechanisms for this purpose.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
 include/linux/freezer.h |    2 ++
 kernel/power/process.c  |   12 ++++++++++++
 mm/page_alloc.c         |    5 +++++
 3 files changed, 19 insertions(+)

Index: linux-2.6/kernel/power/process.c
===================================================================
--- linux-2.6.orig/kernel/power/process.c
+++ linux-2.6/kernel/power/process.c
@@ -19,6 +19,8 @@
  */
 #define TIMEOUT	(20 * HZ)
 
+static bool tasks_frozen;
+
 static inline int freezeable(struct task_struct * p)
 {
 	if ((p == current) ||
@@ -120,6 +122,10 @@ int freeze_processes(void)
  Exit:
 	BUG_ON(in_atomic());
 	printk("\n");
+
+	if (!error)
+		tasks_frozen = true;
+
 	return error;
 }
 
@@ -145,6 +151,8 @@ static void thaw_tasks(bool nosig_only)
 
 void thaw_processes(void)
 {
+	tasks_frozen = false;
+
 	printk("Restarting tasks ... ");
 	thaw_tasks(true);
 	thaw_tasks(false);
@@ -152,3 +160,7 @@ void thaw_processes(void)
 	printk("done.\n");
 }
 
+bool processes_are_frozen(void)
+{
+	return tasks_frozen;
+}
Index: linux-2.6/include/linux/freezer.h
===================================================================
--- linux-2.6.orig/include/linux/freezer.h
+++ linux-2.6/include/linux/freezer.h
@@ -50,6 +50,7 @@ extern int thaw_process(struct task_stru
 extern void refrigerator(void);
 extern int freeze_processes(void);
 extern void thaw_processes(void);
+extern bool processes_are_frozen(void);
 
 static inline int try_to_freeze(void)
 {
@@ -170,6 +171,7 @@ static inline int thaw_process(struct ta
 static inline void refrigerator(void) {}
 static inline int freeze_processes(void) { BUG(); return 0; }
 static inline void thaw_processes(void) {}
+static inline bool processes_are_frozen(void) { return false; }
 
 static inline int try_to_freeze(void) { return 0; }
 
Index: linux-2.6/mm/page_alloc.c
===================================================================
--- linux-2.6.orig/mm/page_alloc.c
+++ linux-2.6/mm/page_alloc.c
@@ -46,6 +46,7 @@
 #include <linux/page-isolation.h>
 #include <linux/page_cgroup.h>
 #include <linux/debugobjects.h>
+#include <linux/freezer.h>
 
 #include <asm/tlbflush.h>
 #include <asm/div64.h>
@@ -1600,6 +1601,10 @@ nofail_alloc:
 		if (page)
 			goto got_pg;
 	} else if ((gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY)) {
+		/* The OOM killer won't work if processes are frozen. */
+		if (processes_are_frozen())
+			goto nopage;
+
 		if (!try_set_zone_oom(zonelist, gfp_mask)) {
 			schedule_timeout_uninterruptible(1);
 			goto restart;

  reply	other threads:[~2009-05-06 22:51 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-06 22:40 [RFC][PATCH 0/5] PM/Hibernate: Rework memory shrinking Rafael J. Wysocki
2009-05-06 22:41 ` Rafael J. Wysocki [this message]
2009-05-06 23:00   ` [RFC][PATCH 1/5] PM/Freezer: Disable OOM killer when tasks are frozen Nigel Cunningham
2009-05-07 12:10     ` Rafael J. Wysocki
2009-05-07  0:36   ` [linux-pm] [RFC][PATCH 1/5] PM/Freezer: Disable OOM killer whentasks " Matt Helsley
2009-05-07 12:09     ` Rafael J. Wysocki
2009-05-06 22:42 ` [RFC][PATCH 2/5] PM/Suspend: Do not shrink memory before suspend Rafael J. Wysocki
2009-05-06 23:01   ` Nigel Cunningham
2009-05-06 22:42 ` [RFC][PATCH 3/5] PM/Hibernate: Move memory shrinking to snapshot.c (rev. 2) Rafael J. Wysocki
2009-05-06 22:44 ` [RFC][PATCH 4/5] PM/Hibernate: Rework shrinking of memory Rafael J. Wysocki
2009-05-06 23:27   ` Nigel Cunningham
2009-05-07 12:18     ` Rafael J. Wysocki
2009-05-07 20:00       ` Rafael J. Wysocki
2009-05-07 20:53         ` Nigel Cunningham
2009-05-07 20:51       ` Nigel Cunningham
2009-05-06 22:48 ` [RFC][PATCH 5/5] PM/Hibernate: Do not release preallocated memory unnecessarily Rafael J. Wysocki
2009-05-07 21:48 ` [RFC][PATCH 0/5] PM/Hibernate: Rework memory shrinking (rev. 2) Rafael J. Wysocki
2009-05-07 21:50   ` [RFC][PATCH 1/5] mm: Introduce __GFP_NO_OOM_KILL Rafael J. Wysocki
2009-05-07 22:24     ` [RFC][PATCH] PM/Freezer: Disable OOM killer when tasks are frozen (was: Re: [RFC][PATCH 1/5] mm: Introduce __GFP_NO_OOM_KILL) Rafael J. Wysocki
2009-05-07 21:51   ` [RFC][PATCH 2/5] PM/Suspend: Do not shrink memory before suspend Rafael J. Wysocki
2009-05-08  8:52     ` Wu Fengguang
2009-05-07 21:51   ` [RFC][PATCH 3/5] PM/Hibernate: Move memory shrinking to snapshot.c (rev. 2) Rafael J. Wysocki
2009-05-08  8:53     ` Wu Fengguang
2009-05-07 21:53   ` [RFC][PATCH 4/5] PM/Hibernate: Rework shrinking of memory Rafael J. Wysocki
2009-05-07 21:55   ` [RFC][PATCH 5/5] PM/Hibernate: Do not release preallocated memory unnecessarily Rafael J. Wysocki
2009-05-10 13:48   ` [RFC][PATCH 0/6] PM/Hibernate: Rework memory shrinking (rev. 3) Rafael J. Wysocki
2009-05-10 13:50     ` [RFC][PATCH 1/6] mm: Introduce __GFP_NO_OOM_KILL Rafael J. Wysocki
2009-05-11 20:12       ` David Rientjes
2009-05-11 22:14         ` Rafael J. Wysocki
2009-05-11 22:33           ` Andrew Morton
2009-05-11 23:04             ` Rafael J. Wysocki
2009-05-10 13:50     ` [RFC][PATCH 2/6] PM/Suspend: Do not shrink memory before suspend Rafael J. Wysocki
2009-05-10 13:51     ` [RFC][PATCH 3/6] PM/Hibernate: Move memory shrinking to snapshot.c (rev. 2) Rafael J. Wysocki
2009-05-10 13:53     ` [RFC][PATCH 4/6] PM/Hibernate: Rework shrinking of memory Rafael J. Wysocki
2009-05-10 13:57     ` [RFC][PATCH 5/6] PM/Hibernate: Do not release preallocated memory unnecessarily Rafael J. Wysocki
2009-05-10 19:49       ` Rafael J. Wysocki
2009-05-10 14:12     ` [RFC][PATCH 6/6] PM/Hibernate: Estimate hard core working set size Rafael J. Wysocki
2009-05-10 19:53       ` Rafael J. Wysocki
2009-05-13  8:32     ` [RFC][PATCH 0/6] PM/Hibernate: Rework memory shrinking (rev. 4) Rafael J. Wysocki
2009-05-13  8:34       ` [PATCH 1/6] PM/Suspend: Do not shrink memory before suspend Rafael J. Wysocki
2009-05-13  8:35       ` [PATCH 2/6] PM/Hibernate: Move memory shrinking to snapshot.c (rev. 2) Rafael J. Wysocki
2009-05-13  8:37       ` [PATCH 3/6] mm, PM/Freezer: Disable OOM killer when tasks are frozen Rafael J. Wysocki
2009-05-13  9:19         ` Pavel Machek
2009-05-13 22:35         ` David Rientjes
2009-05-13 22:47           ` Andrew Morton
2009-05-13 23:01             ` David Rientjes
2009-05-13  8:39       ` [PATCH 4/6] PM/Hibernate: Rework shrinking of memory Rafael J. Wysocki
2009-05-13 19:34         ` Andrew Morton
2009-05-13 20:55           ` Rafael J. Wysocki
2009-05-13 21:16             ` Andrew Morton
2009-05-13 21:56               ` Rafael J. Wysocki
2009-05-14  9:40                 ` Pavel Machek
2009-05-14 17:49                   ` Rafael J. Wysocki
2009-05-15 13:09                     ` Pavel Machek
2009-05-14 18:26             ` Rafael J. Wysocki
2009-05-13  8:40       ` [PATCH 5/6] PM/Hibernate: Do not release preallocated memory unnecessarily (rev. 2) Rafael J. Wysocki
2009-05-14 11:09         ` Pavel Machek
2009-05-14 17:52           ` Rafael J. Wysocki
2009-05-15 13:11             ` Pavel Machek
2009-05-15 14:52               ` Rafael J. Wysocki
2009-05-13  8:42       ` [RFC][PATCH 6/6] PM/Hibernate: Do not try to allocate too much memory too hard Rafael J. Wysocki
2009-05-14 11:14         ` Pavel Machek
2009-05-14 17:59           ` Rafael J. Wysocki
2009-05-15 13:14             ` Pavel Machek
2009-05-15 14:40               ` Rafael J. Wysocki
2009-05-17 12:06         ` Wu Fengguang
2009-05-17 12:55           ` Rafael J. Wysocki
2009-05-17 14:07             ` Wu Fengguang
2009-05-17 16:53               ` Rafael J. Wysocki
2009-05-18  8:32                 ` Wu Fengguang
2009-05-17 21:14               ` Rafael J. Wysocki
2009-05-18  8:56                 ` Wu Fengguang
2009-05-18 17:07                   ` Rafael J. Wysocki
2009-05-19  0:47                     ` Wu Fengguang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200905070041.04787.rjw@sisk.pl \
    --to=rjw@sisk.pl \
    --cc=akpm@linux-foundation.org \
    --cc=fengguang.wu@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=nigel@tuxonice.net \
    --cc=pavel@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox