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: Tue, 03 Jun 2008 18:16:56 +0200 [thread overview]
Message-ID: <87zlq2h4sn.fsf@saeurebad.de> (raw)
In-Reply-To: <20080603225700.9780.E1E9C6FF@jp.fujitsu.com> (Yasunori Goto's message of "Tue, 03 Jun 2008 22:59:16 +0900")
Hi,
Yasunori Goto <y-goto@jp.fujitsu.com> writes:
> Hmm, my ia64 (NUMA) box can't boot up with this patch.
> I'll chase its cause deeply tomorrow.
I think I found it.
>> --- a/mm/bootmem.c
>> +++ b/mm/bootmem.c
>> @@ -408,6 +408,7 @@ static void * __init alloc_bootmem_core(
>> unsigned long size, unsigned long align,
>> unsigned long goal, unsigned long limit)
>> {
>> + unsigned long fallback = 0;
>> unsigned long min, max, start, step;
>>
>> BUG_ON(!size);
>> @@ -441,10 +442,11 @@ static void * __init alloc_bootmem_core(
>>
>> 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);
>> }
>>
>> while (1) {
>> @@ -491,10 +493,39 @@ find_block:
>> return region;
>> }
>>
>> + if (fallback) {
>> + start = ALIGN(fallback, step);
>> + fallback = 0;
>> + goto find_block;
>> + }
>> +
>> + return NULL;
>> +}
>> +
>> +static void * __init ___alloc_bootmem_nopanic(unsigned long size,
>> + unsigned long align,
>> + unsigned long goal,
>> + unsigned long limit)
>> +{
>> + bootmem_data_t *bdata;
>> +
>> +restart:
>> + list_for_each_entry(bdata, &bdata_list, list) {
>> + void *region;
>> +
>> + if (goal && goal < bdata->node_boot_start)
>> + continue;
This check is backwards and probably made your boot fail.
>> + if (limit && limit < bdata->node_boot_start)
>> + continue;
Changed this to break, because we don't need to search any further if
the current node already starts at/above the limit (remember, we walk a
list sorted by ->node_boot_start here).
I also made the checks more intuitively understandable.
Could you try the following fix on top of this patch?
Hannes
--- a/mm/bootmem.c
+++ b/mm/bootmem.c
@@ -513,10 +513,10 @@ restart:
list_for_each_entry(bdata, &bdata_list, list) {
void *region;
- if (goal && goal < bdata->node_boot_start)
- continue;
- if (limit && limit < bdata->node_boot_start)
+ if (goal && bdata->node_low_pfn <= PFN_DOWN(goal))
continue;
+ if (limit && bdata->node_boot_start >= limit)
+ break;
region = alloc_bootmem_core(bdata, size, align, goal, limit);
if (region)
next prev parent reply other threads:[~2008-06-03 16:17 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 [this message]
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
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=87zlq2h4sn.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