From: Dave Hansen <dave@linux.vnet.ibm.com>
To: "Rafael J. Wysocki" <rjw@sisk.pl>,
Yasunori Goto <y-goto@jp.fujitsu.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Nigel Cunningham <ncunningham@crca.org.au>,
Matt Tolentino <matthew.e.tolentino@intel.com>,
linux-pm@lists.osdl.org, Dave Hansen <haveblue@us.ibm.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org, pavel@suse.cz,
Mel Gorman <mel@skynet.ie>, Andy Whitcroft <apw@shadowen.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [linux-pm] [PATCH] hibernation should work ok with memory hotplug
Date: Tue, 04 Nov 2008 08:59:05 -0800 [thread overview]
Message-ID: <1225817945.12673.602.camel@nimitz> (raw)
In-Reply-To: <200811041734.04802.rjw@sisk.pl>
[-- Attachment #1: Type: text/plain, Size: 1209 bytes --]
On Tue, 2008-11-04 at 17:34 +0100, Rafael J. Wysocki wrote:
> Now, I need to do one more thing, which is to check how much memory has to be
> freed before creating the image. For this purpose I need to lock memory
> hotplug temporarily, count pages to free and unlock it. What interface should
> I use for this purpose?
>
> [I'll also need to lock memory hotplug temporarily during resume.]
We currently don't have any big switch to disable memory hotplug, like
lock_memory_hotplug() or something. :)
If you are simply scanning and counting pages, I think the best thing to
use would be the zone_span_seq*() seqlock stuff. Do your count inside
the seqlock's while loop. That covers detecting a zone changing while
it is being scanned.
The other case to detect is when a new zone gets added. These are
really rare. Rare enough that we actually use a stop_machine() call in
build_all_zonelists() to do it. All you would have to do is detect when
one of these calls gets made. I think that's a good application for a
new seq_lock.
I've attached an utterly untested patch that should do the trick.
Yasunori and KAME should probably take a look at it since the node
addition code is theirs.
-- Dave
[-- Attachment #2: zone-list-seqlock.patch --]
[-- Type: text/x-patch, Size: 1358 bytes --]
---
linux-2.6.git-dave/mm/page_alloc.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff -puN mm/page_alloc.c~zone-list-seqlock mm/page_alloc.c
--- linux-2.6.git/mm/page_alloc.c~zone-list-seqlock 2008-11-04 08:53:38.000000000 -0800
+++ linux-2.6.git-dave/mm/page_alloc.c 2008-11-04 08:57:04.000000000 -0800
@@ -2378,17 +2378,43 @@ static void build_zonelist_cache(pg_data
#endif /* CONFIG_NUMA */
+/*
+ * This provides a way for other parts of the
+ * system to detect when the list of zones
+ * might have changed underneath them.
+ *
+ * Use this if you are doing a for_each_zone()
+ * or for_each_node() and really, really care
+ * if you miss some memory.
+ */
+static seqlock_t zonelist_seqlock = SEQLOCK_UNLOCKED;
+
+/*
+ * We could #ifdef these under MEMORY_HOTPLUG, but they
+ * are tiny.
+ */
+unsigned zonelist_seqbegin(void)
+{
+ return read_seqbegin(&zonelist_seqlock);
+}
+int zonelist_seqretry(void)
+{
+ return read_seqretry(&zonelist_seqlock, iv);
+}
+
/* return values int ....just for stop_machine() */
static int __build_all_zonelists(void *dummy)
{
int nid;
+ write_seqlock(&zonelist_seqlock);
for_each_online_node(nid) {
pg_data_t *pgdat = NODE_DATA(nid);
build_zonelists(pgdat);
build_zonelist_cache(pgdat);
}
+ write_sequnlock(&zonelist_seqlock);
return 0;
}
_
next prev parent reply other threads:[~2008-11-04 16:59 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-29 10:59 [PATCH] hibernation should work ok with memory hotplug Pavel Machek
2008-10-29 12:25 ` Rafael J. Wysocki
2008-11-03 20:51 ` Andrew Morton
2008-11-03 20:51 ` Andrew Morton
2008-11-03 21:18 ` [linux-pm] " Nigel Cunningham
2008-11-03 21:18 ` Nigel Cunningham
2008-11-03 21:21 ` Dave Hansen
2008-11-03 22:24 ` Rafael J. Wysocki
2008-11-03 22:24 ` Rafael J. Wysocki
2008-11-03 22:34 ` Dave Hansen
2008-11-03 22:34 ` Dave Hansen
2008-11-03 23:05 ` Rafael J. Wysocki
2008-11-03 23:05 ` Rafael J. Wysocki
2008-11-03 23:10 ` Dave Hansen
2008-11-03 23:10 ` Dave Hansen
2008-11-04 0:29 ` Rafael J. Wysocki
2008-11-04 0:29 ` Rafael J. Wysocki
2008-11-04 0:52 ` Dave Hansen
2008-11-04 0:52 ` Dave Hansen
2008-11-03 23:39 ` Andy Whitcroft
2008-11-03 23:39 ` Andy Whitcroft
2008-11-04 4:02 ` [linux-pm] " Nigel Cunningham
2008-11-04 4:02 ` Nigel Cunningham
2008-11-04 7:08 ` Rafael J. Wysocki
2008-11-04 7:08 ` Rafael J. Wysocki
2008-11-04 7:36 ` Dave Hansen
2008-11-04 7:36 ` Dave Hansen
2008-11-04 8:54 ` Rafael J. Wysocki
2008-11-04 8:54 ` Rafael J. Wysocki
2008-11-04 15:21 ` Dave Hansen
2008-11-04 15:21 ` Dave Hansen
2008-11-04 15:35 ` Rafael J. Wysocki
2008-11-04 15:35 ` Rafael J. Wysocki
2008-11-04 15:39 ` Dave Hansen
2008-11-04 15:39 ` Dave Hansen
2008-11-04 16:34 ` Rafael J. Wysocki
2008-11-04 16:34 ` Rafael J. Wysocki
2008-11-04 16:59 ` Dave Hansen [this message]
2008-11-05 0:38 ` KAMEZAWA Hiroyuki
2008-11-05 0:38 ` KAMEZAWA Hiroyuki
2008-11-05 11:08 ` Rafael J. Wysocki
2008-11-05 11:08 ` Rafael J. Wysocki
2008-11-06 0:14 ` KAMEZAWA Hiroyuki
2008-11-06 0:14 ` KAMEZAWA Hiroyuki
2008-11-06 0:28 ` Dave Hansen
2008-11-06 0:28 ` Dave Hansen
2008-11-06 0:53 ` KAMEZAWA Hiroyuki
2008-11-06 0:53 ` KAMEZAWA Hiroyuki
2008-11-06 2:03 ` Nigel Cunningham
2008-11-06 2:03 ` Nigel Cunningham
2008-11-06 2:13 ` KAMEZAWA Hiroyuki
2008-11-06 2:13 ` KAMEZAWA Hiroyuki
2008-11-06 14:47 ` Alan Stern
2008-11-06 14:47 ` Alan Stern
2008-11-07 1:09 ` KAMEZAWA Hiroyuki
2008-11-07 1:09 ` KAMEZAWA Hiroyuki
2008-11-07 1:09 ` KAMEZAWA Hiroyuki
2008-11-06 8:47 ` Pavel Machek
2008-11-06 8:47 ` Pavel Machek
2008-11-06 1:17 ` KAMEZAWA Hiroyuki
2008-11-06 1:17 ` KAMEZAWA Hiroyuki
2008-11-06 1:43 ` Nigel Cunningham
2008-11-06 1:43 ` Nigel Cunningham
2008-11-06 1:54 ` KAMEZAWA Hiroyuki
2008-11-06 1:54 ` KAMEZAWA Hiroyuki
2008-11-06 1:59 ` KAMEZAWA Hiroyuki
2008-11-06 1:59 ` KAMEZAWA Hiroyuki
2008-11-06 2:00 ` Nigel Cunningham
2008-11-06 2:00 ` Nigel Cunningham
2008-11-06 2:07 ` KAMEZAWA Hiroyuki
2008-11-06 2:07 ` KAMEZAWA Hiroyuki
2008-11-06 3:12 ` KAMEZAWA Hiroyuki
2008-11-06 3:12 ` KAMEZAWA Hiroyuki
2008-11-06 3:28 ` Yasunori Goto
2008-11-06 3:28 ` Yasunori Goto
2008-11-06 6:04 ` KAMEZAWA Hiroyuki
2008-11-06 6:04 ` KAMEZAWA Hiroyuki
2008-11-06 14:48 ` Alan Stern
2008-11-06 14:48 ` Alan Stern
2008-11-06 14:48 ` Alan Stern
2008-11-06 20:46 ` Nigel Cunningham
2008-11-06 20:46 ` Nigel Cunningham
2008-11-06 9:12 ` Pavel Machek
2008-11-06 9:12 ` Pavel Machek
2008-11-06 9:12 ` KAMEZAWA Hiroyuki
2008-11-06 9:12 ` KAMEZAWA Hiroyuki
2008-11-06 9:26 ` Nigel Cunningham
2008-11-06 9:26 ` Nigel Cunningham
2008-11-06 14:43 ` Alan Stern
2008-11-06 14:43 ` Alan Stern
2008-11-06 14:43 ` Alan Stern
2008-11-04 7:09 ` Dave Hansen
2008-11-04 7:09 ` Dave Hansen
2008-11-04 7:30 ` Nigel Cunningham
2008-11-04 7:30 ` Nigel Cunningham
2008-11-04 7:53 ` Dave Hansen
2008-11-04 7:53 ` Dave Hansen
2008-11-05 9:10 ` Nigel Cunningham
2008-11-05 9:10 ` Nigel Cunningham
2008-11-05 10:58 ` Rafael J. Wysocki
2008-11-05 10:58 ` Rafael J. Wysocki
2008-11-05 16:23 ` Dave Hansen
2008-11-05 16:23 ` Dave Hansen
2008-11-06 12:28 ` Pavel Machek
2008-11-06 12:28 ` Pavel Machek
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=1225817945.12673.602.camel@nimitz \
--to=dave@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=apw@shadowen.org \
--cc=haveblue@us.ibm.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-pm@lists.osdl.org \
--cc=matthew.e.tolentino@intel.com \
--cc=mel@skynet.ie \
--cc=ncunningham@crca.org.au \
--cc=pavel@suse.cz \
--cc=rjw@sisk.pl \
--cc=y-goto@jp.fujitsu.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.