Re: [PATCH -mm 11/14] bootmem: respect goal more likely

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Yasunori Goto <y-goto@...>
Cc: Andrew Morton <akpm@...>, Ingo Molnar <mingo@...>, Yinghai Lu <yhlu.kernel@...>, Andi Kleen <andi@...>, <linux-kernel@...>
Date: Thursday, June 5, 2008 - 12:41 pm

Hi,

Yasunori Goto <y-goto@jp.fujitsu.com> writes:


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;
 	}
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH -mm 11/14] bootmem: respect goal more likely, Johannes Weiner, (Mon Jun 2, 8:50 pm)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Yasunori Goto, (Tue Jun 3, 9:59 am)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Johannes Weiner, (Tue Jun 3, 12:16 pm)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Yasunori Goto, (Wed Jun 4, 6:55 am)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Johannes Weiner, (Wed Jun 4, 4:25 pm)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Yasunori Goto, (Wed Jun 4, 10:58 pm)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Johannes Weiner, (Thu Jun 5, 12:13 am)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Yasunori Goto, (Thu Jun 5, 4:31 am)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Johannes Weiner, (Thu Jun 5, 12:41 pm)
Re: [PATCH -mm 11/14] bootmem: respect goal more likely, Yasunori Goto, (Thu Jun 5, 8:25 pm)