Re: [patch 1/2] fix call to alloc_bootmem after bootmem has been freed

Christian Krafft
2006-11-21T18:02:13Z

On Tue, 21 Nov 2006 08:55:35 -0800
Andrew Morton <akpm@osdl.org> wrote:

> On Wed, 15 Nov 2006 19:32:38 +0100
> Christian Krafft <krafft@de.ibm.com> wrote:
>
> > In some cases it might happen, that alloc_bootmem is beeing called
> > after bootmem pages have been freed. This is, because the condition
> > SYSTEM_BOOTING is still true after bootmem has been freed.
> >
> > Signed-off-by: Christian Krafft <krafft@de.ibm.com>
> >
> > Index: linux/mm/page_alloc.c
> > ===================================================================
> > --- linux.orig/mm/page_alloc.c
> > +++ linux/mm/page_alloc.c
> > @@ -1931,7 +1931,7 @@ int zone_wait_table_init(struct zone *zo
> > alloc_size = zone->wait_table_hash_nr_entries
> > * sizeof(wait_queue_head_t);
> >
> > - if (system_state == SYSTEM_BOOTING) {
> > + if (!slab_is_available()) {
> > zone->wait_table = (wait_queue_head_t *)
> > alloc_bootmem_node(pgdat, alloc_size);
> > } else {
>
> I don't think that slab_is_available() is an appropriate way of working out
> if we can call vmalloc().

Afaik slab_is_available() is the generic replacement for mem_init_done, which exists only on powerpc.
If thats not appropriate, I dont know why. However, SYSTEM_BOOTING is definitively wrong.

> Also, a more complete description of the problem is needed, please. Which
> caller is incorrectly allocating bootmem?
>

spu_base is causing the call to alloc_bootmem but only, if built into kernel. Other components might have the same problem.

cheers,
ck

--
Mit freundlichen Grussen,
kind regards,

Christian Krafft
IBM Systems & Technology Group,
Linux Kernel Development
IT Specialist