public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mm: make free_bootmem to loop bdata_list
@ 2008-03-13 18:53 Yinghai Lu
  2008-03-13 19:05 ` Andrew Morton
  2008-03-14  1:39 ` KAMEZAWA Hiroyuki
  0 siblings, 2 replies; 7+ messages in thread
From: Yinghai Lu @ 2008-03-13 18:53 UTC (permalink / raw)
  To: Andrew Morton
  Cc: mingo, clameter, linux-kernel, Andi Kleen, Yasunori Goto,
	KAMEZAWA Hiroyuki

[-- Attachment #1: Type: text/plain, Size: 381 bytes --]

[PATCH] mm: make free_bootmem to loop bdata_list

        [PATCH] mm: fix boundary checking in free_bootmem_core

make the free_bootmem_core could handle out of range case. we could use
bdata_list to make sure the range can be freed for sure.

so next time, we don't need to loop online nodes and could use
free_bootmem directly.

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: free_bootmem_loop_x.patch --]
[-- Type: text/x-patch; name=free_bootmem_loop_x.patch, Size: 507 bytes --]

Index: linux-2.6/mm/bootmem.c
===================================================================
--- linux-2.6.orig/mm/bootmem.c
+++ linux-2.6/mm/bootmem.c
@@ -427,7 +438,9 @@ int __init reserve_bootmem(unsigned long
 
 void __init free_bootmem(unsigned long addr, unsigned long size)
 {
-	free_bootmem_core(NODE_DATA(0)->bdata, addr, size);
+	bootmem_data_t *bdata;
+	list_for_each_entry(bdata, &bdata_list, list)
+		free_bootmem_core(bdata, addr, size);
 }
 
 unsigned long __init free_all_bootmem(void)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-13 18:53 [PATCH] mm: make free_bootmem to loop bdata_list Yinghai Lu
@ 2008-03-13 19:05 ` Andrew Morton
  2008-03-13 19:10   ` Yinghai Lu
  2008-03-14  1:39 ` KAMEZAWA Hiroyuki
  1 sibling, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2008-03-13 19:05 UTC (permalink / raw)
  To: Yinghai Lu; +Cc: mingo, clameter, linux-kernel, ak, y-goto, kamezawa.hiroyu

On Thu, 13 Mar 2008 11:53:31 -0700
"Yinghai Lu" <yhlu.kernel@gmail.com> wrote:

> [PATCH] mm: make free_bootmem to loop bdata_list
> 
>         [PATCH] mm: fix boundary checking in free_bootmem_core
> 
> make the free_bootmem_core could handle out of range case. we could use
> bdata_list to make sure the range can be freed for sure.
> 
> so next time, we don't need to loop online nodes and could use
> free_bootmem directly.
> 
> Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
> 

What is the relationship (if any) between this and
mm-fix-boundary-checking-in-free_bootmem_core.patch?

Do you believe ths new patch is needed in 2.6.25 and if so, why?

Thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-13 19:05 ` Andrew Morton
@ 2008-03-13 19:10   ` Yinghai Lu
  0 siblings, 0 replies; 7+ messages in thread
From: Yinghai Lu @ 2008-03-13 19:10 UTC (permalink / raw)
  To: Andrew Morton; +Cc: mingo, clameter, linux-kernel, ak, y-goto, kamezawa.hiroyu

On Thu, Mar 13, 2008 at 12:05 PM, Andrew Morton
<akpm@linux-foundation.org> wrote:
>
> On Thu, 13 Mar 2008 11:53:31 -0700
>  "Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
>
>  > [PATCH] mm: make free_bootmem to loop bdata_list
>  >
>  >         [PATCH] mm: fix boundary checking in free_bootmem_core
>  >
>  > make the free_bootmem_core could handle out of range case. we could use
>  > bdata_list to make sure the range can be freed for sure.
>  >
>  > so next time, we don't need to loop online nodes and could use
>  > free_bootmem directly.
>  >
>  > Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
>  >
>
>  What is the relationship (if any) between this and
>  mm-fix-boundary-checking-in-free_bootmem_core.patch?
after mm-fix-boundary-checking-in-free_bootmem_core.patch, or you can
fold this into that.
>
>  Do you believe ths new patch is needed in 2.6.25 and if so, why?

could solve some free_bootmem in extreme case like no ram on node 0.

YH

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-14  1:39 ` KAMEZAWA Hiroyuki
@ 2008-03-14  1:39   ` Yinghai Lu
  2008-03-14  2:04     ` KAMEZAWA Hiroyuki
  0 siblings, 1 reply; 7+ messages in thread
From: Yinghai Lu @ 2008-03-14  1:39 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki
  Cc: Andrew Morton, mingo, clameter, linux-kernel, Andi Kleen,
	Yasunori Goto

On Thu, Mar 13, 2008 at 6:39 PM, KAMEZAWA Hiroyuki
<kamezawa.hiroyu@jp.fujitsu.com> wrote:
> On Thu, 13 Mar 2008 11:53:31 -0700
>  "Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
>  > ===================================================================
>  > --- linux-2.6.orig/mm/bootmem.c
>  > +++ linux-2.6/mm/bootmem.c
>  > @@ -427,7 +438,9 @@ int __init reserve_bootmem(unsigned long
>  >
>  >  void __init free_bootmem(unsigned long addr, unsigned long size)
>  >  {
>  > -     free_bootmem_core(NODE_DATA(0)->bdata, addr, size);
>  > +     bootmem_data_t *bdata;
>  > +     list_for_each_entry(bdata, &bdata_list, list)
>  > +             free_bootmem_core(bdata, addr, size);
>  >  }
>
>
>  Just a confirmation.
>  In above loop, boundary check in free_bootmem_core() hits two or more times ?
>  If yes, it's ok.
>  If no, please exit loop at hit.

yes. need that handle range cross node (RAMDISK case that is end
beyond end_of_ram).

YH

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-13 18:53 [PATCH] mm: make free_bootmem to loop bdata_list Yinghai Lu
  2008-03-13 19:05 ` Andrew Morton
@ 2008-03-14  1:39 ` KAMEZAWA Hiroyuki
  2008-03-14  1:39   ` Yinghai Lu
  1 sibling, 1 reply; 7+ messages in thread
From: KAMEZAWA Hiroyuki @ 2008-03-14  1:39 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Andrew Morton, mingo, clameter, linux-kernel, Andi Kleen,
	Yasunori Goto

On Thu, 13 Mar 2008 11:53:31 -0700
"Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
> ===================================================================
> --- linux-2.6.orig/mm/bootmem.c
> +++ linux-2.6/mm/bootmem.c
> @@ -427,7 +438,9 @@ int __init reserve_bootmem(unsigned long
>  
>  void __init free_bootmem(unsigned long addr, unsigned long size)
>  {
> -	free_bootmem_core(NODE_DATA(0)->bdata, addr, size);
> +	bootmem_data_t *bdata;
> +	list_for_each_entry(bdata, &bdata_list, list)
> +		free_bootmem_core(bdata, addr, size);
>  }


Just a confirmation.
In above loop, boundary check in free_bootmem_core() hits two or more times ?
If yes, it's ok.
If no, please exit loop at hit.

Thanks,
-Kame
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-14  1:39   ` Yinghai Lu
@ 2008-03-14  2:04     ` KAMEZAWA Hiroyuki
  2008-03-14  2:07       ` Yinghai Lu
  0 siblings, 1 reply; 7+ messages in thread
From: KAMEZAWA Hiroyuki @ 2008-03-14  2:04 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Andrew Morton, mingo, clameter, linux-kernel, Andi Kleen,
	Yasunori Goto

On Thu, 13 Mar 2008 18:39:34 -0700
"Yinghai Lu" <yhlu.kernel@gmail.com> wrote:

> On Thu, Mar 13, 2008 at 6:39 PM, KAMEZAWA Hiroyuki
> <kamezawa.hiroyu@jp.fujitsu.com> wrote:
> > On Thu, 13 Mar 2008 11:53:31 -0700
> >  "Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
> >  > ===================================================================
> >  > --- linux-2.6.orig/mm/bootmem.c
> >  > +++ linux-2.6/mm/bootmem.c
> >  > @@ -427,7 +438,9 @@ int __init reserve_bootmem(unsigned long
> >  >
> >  >  void __init free_bootmem(unsigned long addr, unsigned long size)
> >  >  {
> >  > -     free_bootmem_core(NODE_DATA(0)->bdata, addr, size);
> >  > +     bootmem_data_t *bdata;
> >  > +     list_for_each_entry(bdata, &bdata_list, list)
> >  > +             free_bootmem_core(bdata, addr, size);
> >  >  }
> >
> >
> >  Just a confirmation.
> >  In above loop, boundary check in free_bootmem_core() hits two or more times ?
> >  If yes, it's ok.
> >  If no, please exit loop at hit.
> 
> yes. need that handle range cross node (RAMDISK case that is end
> beyond end_of_ram).
> 
Then, <addr, size> can spread across nodes. 

IMHO, there are *big* memory hole between nodes in some systems. 
This kind of interface, which allows alloc/free bootmem accross nodes,
will see terrible trouble when a programmer assumes  "alloc/free bootmem
always return contiguous size of memory" (This is guaranteed now,)

Does the new allocator (you changed ?) guarantee that returned <address, size>
is fully contiguous even if it spreads accross nodes ?

If no, NACK for this version.

Thanks,
-Kame



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] mm: make free_bootmem to loop bdata_list
  2008-03-14  2:04     ` KAMEZAWA Hiroyuki
@ 2008-03-14  2:07       ` Yinghai Lu
  0 siblings, 0 replies; 7+ messages in thread
From: Yinghai Lu @ 2008-03-14  2:07 UTC (permalink / raw)
  To: KAMEZAWA Hiroyuki
  Cc: Andrew Morton, mingo, clameter, linux-kernel, Andi Kleen,
	Yasunori Goto

On Thu, Mar 13, 2008 at 7:04 PM, KAMEZAWA Hiroyuki
<kamezawa.hiroyu@jp.fujitsu.com> wrote:
> On Thu, 13 Mar 2008 18:39:34 -0700
>
> "Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
>
>  > On Thu, Mar 13, 2008 at 6:39 PM, KAMEZAWA Hiroyuki
>  > <kamezawa.hiroyu@jp.fujitsu.com> wrote:
>  > > On Thu, 13 Mar 2008 11:53:31 -0700
>  > >  "Yinghai Lu" <yhlu.kernel@gmail.com> wrote:
>  > >  > ===================================================================
>  > >  > --- linux-2.6.orig/mm/bootmem.c
>  > >  > +++ linux-2.6/mm/bootmem.c
>  > >  > @@ -427,7 +438,9 @@ int __init reserve_bootmem(unsigned long
>  > >  >
>  > >  >  void __init free_bootmem(unsigned long addr, unsigned long size)
>  > >  >  {
>  > >  > -     free_bootmem_core(NODE_DATA(0)->bdata, addr, size);
>  > >  > +     bootmem_data_t *bdata;
>  > >  > +     list_for_each_entry(bdata, &bdata_list, list)
>  > >  > +             free_bootmem_core(bdata, addr, size);
>  > >  >  }
>  > >
>  > >
>  > >  Just a confirmation.
>  > >  In above loop, boundary check in free_bootmem_core() hits two or more times ?
>  > >  If yes, it's ok.
>  > >  If no, please exit loop at hit.
>  >
>  > yes. need that handle range cross node (RAMDISK case that is end
>  > beyond end_of_ram).
>  >
>  Then, <addr, size> can spread across nodes.
>
>  IMHO, there are *big* memory hole between nodes in some systems.
>  This kind of interface, which allows alloc/free bootmem accross nodes,
>  will see terrible trouble when a programmer assumes  "alloc/free bootmem
>  always return contiguous size of memory" (This is guaranteed now,)
>
>  Does the new allocator (you changed ?) guarantee that returned <address, size>
>  is fully contiguous even if it spreads accross nodes ?
>
>  If no, NACK for this version.

i didn't change alloc_mem, it still get range from one node and continuous.

new free_bootmem could remove the assumpition in
setup_64.c::setup_arch:free_bootmem about node0
                        /* Assumes everything on node 0 */
                        free_bootmem(ramdisk_image, ramdisk_size);
                        printk(KERN_ERR "initrd extends beyond end of memory "
                               "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
                               ramdisk_end, end_of_mem);
                        initrd_start = 0;

YH

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-03-14  2:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-13 18:53 [PATCH] mm: make free_bootmem to loop bdata_list Yinghai Lu
2008-03-13 19:05 ` Andrew Morton
2008-03-13 19:10   ` Yinghai Lu
2008-03-14  1:39 ` KAMEZAWA Hiroyuki
2008-03-14  1:39   ` Yinghai Lu
2008-03-14  2:04     ` KAMEZAWA Hiroyuki
2008-03-14  2:07       ` Yinghai Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox