From: David Miller <davem@davemloft.net>
To: mel@csn.ul.ie
Cc: kamezawa.hiroyu@jp.fujitsu.com, heiko.carstens@de.ibm.com,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
sparclinux@vger.kernel.org
Subject: HOLES_IN_ZONE...
Date: Wed, 04 Feb 2009 22:26:51 -0800 (PST) [thread overview]
Message-ID: <20090204.222651.26527737.davem@davemloft.net> (raw)
So I've been fighting mysterious crashes on my main sparc64 devel
machine. What's happening is that the assertion in
mm/page_alloc.c:move_freepages() is triggering:
BUG_ON(page_zone(start_page) != page_zone(end_page));
Once I knew this is what was happening, I added some annotations:
if (unlikely(page_zone(start_page) != page_zone(end_page))) {
printk(KERN_ERR "move_freepages: Bogus zones: "
"start_page[%p] end_page[%p] zone[%p]\n",
start_page, end_page, zone);
printk(KERN_ERR "move_freepages: "
"start_zone[%p] end_zone[%p]\n",
page_zone(start_page), page_zone(end_page));
printk(KERN_ERR "move_freepages: "
"start_pfn[0x%lx] end_pfn[0x%lx]\n",
page_to_pfn(start_page), page_to_pfn(end_page));
printk(KERN_ERR "move_freepages: "
"start_nid[%d] end_nid[%d]\n",
page_to_nid(start_page), page_to_nid(end_page));
...
And here's what I got:
move_freepages: Bogus zones: start_page[2207d0000] end_page[2207dffc0] zone[fffff8103effcb00]
move_freepages: start_zone[fffff8103effcb00] end_zone[fffff8003fffeb00]
move_freepages: start_pfn[0x81f600] end_pfn[0x81f7ff]
move_freepages: start_nid[1] end_nid[0]
My memory layout on this box is:
[ 0.000000] Zone PFN ranges:
[ 0.000000] Normal 0x00000000 -> 0x0081ff5d
[ 0.000000] Movable zone start PFN for each node
[ 0.000000] early_node_map[8] active PFN ranges
[ 0.000000] 0: 0x00000000 -> 0x00020000
[ 0.000000] 1: 0x00800000 -> 0x0081f7ff
[ 0.000000] 1: 0x0081f800 -> 0x0081fe50
[ 0.000000] 1: 0x0081fed1 -> 0x0081fed8
[ 0.000000] 1: 0x0081feda -> 0x0081fedb
[ 0.000000] 1: 0x0081fedd -> 0x0081fee5
[ 0.000000] 1: 0x0081fee7 -> 0x0081ff51
[ 0.000000] 1: 0x0081ff59 -> 0x0081ff5d
So it's a block move in that 0x81f600-->0x81f7ff region which triggers
the problem.
So I did a lot (and I do mean _A LOT_) of digging. And it seems that
unless you set HOLES_IN_ZONE you have to make sure that all of the
memmap regions of free space in a zone begin and end on an HPAGE_SIZE
boundary (the requirement used to be that it had to be MAX_ORDER
sized).
Well, this assumption enterred the tree back in 2005 (!!!) from
the following commit in the history-2.6 tree:
commit 69fba2dd0335abec0b0de9ac53d5bbb67c31fc60
Author: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Date: Fri Jan 7 22:01:35 2005 -0800
[PATCH] no buddy bitmap patch revisit: for mm/page_alloc.c
At the time only IA64 had HOLES_IN_ZONE added, this happens in the
commit right after the above one.
So in theory Sparc64 has been broken since that commit and subject to
potential memory corruption and other unnice things.
I also noticed that when S390 got virtual memmap support, it acquired
the HOLES_IN_ZONE setting as well, in this commit:
commit f4eb07c17df2e6cf9bd58bfcd9cc9e05e9489d07
Author: Heiko Carstens <heiko.carstens@de.ibm.com>
Date: Fri Dec 8 15:56:07 2006 +0100
[S390] Virtual memmap for s390.
This is confusing. Is HOLES_IN_ZONE only required when virtual mmap
is being used? If so, why is that? This is a very poorly documented
flag, and I'm saying this after pouring over every commit referencing
it.
Later this HOLES_IN_ZONE requirement was removed on s390 by commit:
commit 9f4b0ba81f158df459fa2cfc98ab1475c090f29c
Author: Heiko Carstens <heiko.carstens@de.ibm.com>
Date: Sat Jan 26 14:11:02 2008 +0100
[S390] Get rid of HOLES_IN_ZONE requirement.
Anyways...
The point of this email is, do I really need to set this thing on
sparc64? I've never seen this check triggered before, it only seems
to have started triggering in 2.6.27 or so but I obviously can't find
anything that would influence something of this nature.
It takes a lot of stressing to get that specific chunk of pages to
attempt to be freed up in a group like that :-/
As a suggestion, it would have been a lot more pleasant if the code
validated this requirement (in the !HOLES_IN_ZONE case) at boot time
instead of after 2 hours of stress testing :-(
next reply other threads:[~2009-02-05 6:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-05 6:26 David Miller [this message]
2009-02-05 7:43 ` HOLES_IN_ZONE KAMEZAWA Hiroyuki
2009-02-05 8:00 ` HOLES_IN_ZONE Heiko Carstens
2009-02-05 23:44 ` HOLES_IN_ZONE David Miller
2009-02-06 7:59 ` HOLES_IN_ZONE Heiko Carstens
2009-02-05 9:06 ` HOLES_IN_ZONE KAMEZAWA Hiroyuki
2009-02-05 9:21 ` HOLES_IN_ZONE David Miller
2009-02-05 9:34 ` HOLES_IN_ZONE KAMEZAWA Hiroyuki
2009-02-05 9:56 ` HOLES_IN_ZONE David Miller
2009-02-05 10:39 ` HOLES_IN_ZONE Mel Gorman
2009-02-05 11:14 ` [BUGFIX][PATCH] fix memmap init to initialize valid memmap for memory hole. (Was HOLES_IN_ZONE KAMEZAWA Hiroyuki
2009-02-05 10:10 ` HOLES_IN_ZONE Mel Gorman
2009-02-05 10:14 ` HOLES_IN_ZONE David Miller
2009-02-05 10:41 ` HOLES_IN_ZONE Mel Gorman
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=20090204.222651.26527737.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=akpm@linux-foundation.org \
--cc=heiko.carstens@de.ibm.com \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mel@csn.ul.ie \
--cc=sparclinux@vger.kernel.org \
/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
Powered by JetHome