From: Johannes Weiner <hannes@saeurebad.de>
To: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@elte.hu>, Yinghai Lu <yhlu.kernel@gmail.com>,
Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH -mm 11/14] bootmem: respect goal more likely
Date: Thu, 05 Jun 2008 18:41:11 +0200 [thread overview]
Message-ID: <87zlpz6di0.fsf@saeurebad.de> (raw)
In-Reply-To: <20080605170323.645F.E1E9C6FF@jp.fujitsu.com> (Yasunori Goto's message of "Thu, 05 Jun 2008 17:31:50 +0900")
Hi,
Yasunori Goto <y-goto@jp.fujitsu.com> writes:
> I gotcha! :-)
>
> max -= PFN_DOWN(bdata->node_boot_start);
> start -= PFN_DOWN(bdata->node_boot_start);
> + fallback -= PFN_DOWN(bdata->node_boot_start);
>
> if (bdata->last_success > start) {
> - /* Set goal here to trigger a retry on failure */
> - start = goal = ALIGN(bdata->last_success, step);
> + fallback = start; -------------------------------- (*)
> + start = ALIGN(bdata->last_success, step);
> }
>
> (*) is root cause. "fallback" is set as 0, because start is index of bitmap
> at here. When normal zone is allocated first, and DMA zone is required by
> alloc_bootmem_low() later and first page is free yet, fallback is set as 0.
>
> + if (fallback) {
> + start = ALIGN(fallback, step);
> + fallback = 0;
> + goto find_block;
> + }
> +
>
> As a result, this retry code is skipped, and alloc_bootmem_low() fails.
> So, when I change here from fallback to a retry_flag, my box can boot
> up.
Ah, you got there too :-)
Here is the original Email I wrote but waited to send out until after I
slept:
---
Hi Yasunori,
here is hopefully the fix to your bootup problem. Let me explain:
This is the last but one bootmem allocation on your box:
Jun 5 11:50:43 localhost kernel: bootmem::alloc_bootmem_core nid=0 size=40000 [16 pages] align=80 goal=100000000 limit=0
Jun 5 11:50:43 localhost kernel: bootmem::__reserve nid=0 start=1020588 end=1020598 flags=1
(->last_success is at 1020588 now)
And this is the last one:
Jun 5 11:50:43 localhost kernel: bootmem::alloc_bootmem_core nid=0 size=8000 [2 pages] align=80 goal=0 limit=ffffffff
Goal is zero. So sidx is set to zero as well. last_success is bigger
than sidx, so fallback gets the value of sidx and sidx is updated to
last_succes. But now sidx (1020588) is bigger than the limit (3ffff)
and we fail the first search iteration because of that. We should
fall back to the original sidx stored in fallback now but take a look
at what value fallback must have for this branch to be taken...
I am pretty sure this is the bug you encountered. I spotted it in the
code but your logfile proves my theory.
Hannes
--- a/mm/bootmem.c
+++ b/mm/bootmem.c
@@ -444,7 +444,11 @@ static void * __init alloc_bootmem_core(
midx = max - PFN_DOWN(bdata->node_boot_start);
if (bdata->last_success > sidx) {
- fallback = sidx;
+ /*
+ * Handle the valid case of sidx being zero and still
+ * catch the fallback below.
+ */
+ fallback = sidx + 1;
sidx = ALIGN(bdata->last_success, step);
}
@@ -493,7 +497,7 @@ find_block:
}
if (fallback) {
- sidx = ALIGN(fallback, step);
+ sidx = ALIGN(fallback - 1, step);
fallback = 0;
goto find_block;
}
next prev parent reply other threads:[~2008-06-05 16:42 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-03 0:50 [PATCH -mm 00/14] bootmem rewrite v3 Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 01/14] bootmem: reorder code to match new bootmem structure Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 02/14] bootmem: clean up bootmem.c file header Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 03/14] bootmem: add documentation to API functions Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 04/14] bootmem: add debugging framework Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 05/14] bootmem: revisit bitmap size calculations Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 06/14] bootmem: revisit bootmem descriptor list handling Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 07/14] bootmem: clean up free_all_bootmem_core Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 08/14] bootmem: clean up alloc_bootmem_core Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 09/14] bootmem: free/reserve helpers Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 10/14] bootmem: factor out the marking of a PFN range Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 11/14] bootmem: respect goal more likely Johannes Weiner
2008-06-03 13:59 ` Yasunori Goto
2008-06-03 16:16 ` Johannes Weiner
2008-06-04 10:55 ` Yasunori Goto
2008-06-04 20:25 ` Johannes Weiner
2008-06-05 2:58 ` Yasunori Goto
2008-06-05 4:13 ` Johannes Weiner
[not found] ` <20080605134455.6457.E1E9C6FF@jp.fujitsu.com>
2008-06-05 8:22 ` Johannes Weiner
2008-06-05 8:31 ` Yasunori Goto
2008-06-05 16:41 ` Johannes Weiner [this message]
2008-06-06 0:25 ` Yasunori Goto
2008-06-03 0:50 ` [PATCH -mm 12/14] bootmem: Make __alloc_bootmem_low_node fall back to other nodes Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 13/14] bootmem: revisit alloc_bootmem_section Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 14/14] bootmem: replace node_boot_start in struct bootmem_data Johannes Weiner
-- strict thread matches above, loose matches on Subject: below --
2008-06-05 22:49 [PATCH -mm 00/14] bootmem rewrite v4 Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 11/14] bootmem: respect goal more likely Johannes Weiner
2008-05-30 19:42 [PATCH -mm 00/14] bootmem rewrite v2 Johannes Weiner
2008-05-30 19:42 ` [PATCH -mm 11/14] bootmem: respect goal more likely Johannes Weiner
2008-05-30 20:16 ` Johannes Weiner
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=87zlpz6di0.fsf@saeurebad.de \
--to=hannes@saeurebad.de \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=y-goto@jp.fujitsu.com \
--cc=yhlu.kernel@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox