Messages in this thread | | | From | Johannes Weiner <> | Subject | Re: [PATCH] Fix new alloc_bootmem_core (Re: [PATCH -mm 08/14] bootmem: clean up alloc_bootmem_core) | Date | Tue, 17 Jun 2008 18:59:28 +0200 |
| |
Hi,
Yasunori Goto <y-goto@jp.fujitsu.com> writes:
> Hi Johannes-san. > > I found a bug in this patch. > > >> - eidx = end_pfn - PFN_DOWN(node_boot_start); >> + if (goal && goal < max) >> + start = ALIGN(goal, step); >> + else >> + start = ALIGN(min, step); > > Here should check (min < goal) too. > > If not, start can becomes smaller than min. and sidx doesn't point > correct index. > alloc_bootmem_node() almost allocates pages of other node, > when node's min address is over MAX_DMA_ADDRESS.
Oh, good catch!
> Bye. > > ---- > > Fix new alloc_bootmem_core() of bootmem-clean-up-alloc_bootmem_core.patch > in 2.6.26-rc5-mm3. > > (min < goal) should be checked too. > > > Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com> > CC: Johannes Weiner <hannes@saeurebad.de> Acked-by: Johannes Weiner <hannes@saeurebad.de>
> --- > mm/bootmem.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Index: current/mm/bootmem.c > =================================================================== > --- current.orig/mm/bootmem.c 2008-06-17 18:33:31.000000000 +0900 > +++ current/mm/bootmem.c 2008-06-17 18:34:27.000000000 +0900 > @@ -435,7 +435,7 @@ > > step = max(align >> PAGE_SHIFT, 1UL); > > - if (goal && goal < max) > + if (goal && min < goal && goal < max) > start = ALIGN(goal, step); > else > start = ALIGN(min, step);
Hannes
| |