2.6.15 failure on power4 iSeries

Michael Ellerman michael at ellerman.id.au
Thu Jan 19 11:55:50 EST 2006


On Thu, 19 Jan 2006 09:07, will schmidt wrote:
> > looks like setup_arch() calls into do_init_bootmem() which loops around a
> > reserve_bootmem() call.   the last call into reserve_bootmem isnt
> > returning.

> > -> reserve_bootmem ( 3c800000 0 4

It shoud hit BUG_ON(!size) (in reserve_bootmem_core()), perhaps it is but
we're just not seeing it?

> the code making the last call into lmb_alloc looks like:
>        DBG("-> do_init_bootmem %d\n",__LINE__);
>          bootmap_pages = bootmem_bootmap_pages(total_pages);
>
>          DBG("-> do_init_bootmem %d\n",__LINE__);
>          start = lmb_alloc(bootmap_pages << PAGE_SHIFT, PAGE_SIZE);   /*
> wms */ BUG_ON(!start);
>
>          boot_mapsize = init_bootmem(start >> PAGE_SHIFT, total_pages);
>
>
> I think we call direct into lmb_alloc_base most of the time,..  so the
> difference with this call is the LMB_ALLOC_ANYWHERE parm..
>
> unsigned long __init lmb_alloc(unsigned long size, unsigned long align)
> {
>          return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
> }
>
> LMB_ALLOC_ANYWHERE looks to have a value of 0. 
> "include/asm-powerpc/lmb.h:#define LMB_ALLOC_ANYWHERE    0"
>
> I am not very familiar with this code..  dont know if the '0' here is
> mistakenly mapped to a size, or if this 0 is a red herring.

I think that's fine. LMB_ALLOC_ANYWHERE just constrains where the alloc comes
from. For example if you need an alloc within the RMO.

Try this patch to dump the lmbs. Might be good to compare the output of this to
the same from a known good kernel.

cheers

Index: linux/arch/powerpc/kernel/prom.c
===================================================================
--- linux.orig/arch/powerpc/kernel/prom.c       2006-01-19 10:49:03.000000000 +1100
+++ linux/arch/powerpc/kernel/prom.c    2006-01-19 11:49:52.000000000 +1100
@@ -1134,10 +1134,8 @@ static void __init early_reserve_mem(voi
                lmb_reserve(base, size);
        }
 
-#if 0
        DBG("memory reserved, lmbs :\n");
-       lmb_dump_all();
-#endif
+       lmb_dump_all();
 }
 
 void __init early_init_devtree(void *params)
Index: linux/arch/powerpc/mm/lmb.c
===================================================================
--- linux.orig/arch/powerpc/mm/lmb.c    2006-01-19 10:49:03.000000000 +1100
+++ linux/arch/powerpc/mm/lmb.c 2006-01-19 11:49:34.000000000 +1100
@@ -22,7 +22,7 @@
 #include "mmu_decl.h"          /* for __max_low_memory */
 #endif
 
-#undef DEBUG
+#define DEBUG 1
 
 #ifdef DEBUG
 #include <asm/udbg.h>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://ozlabs.org/pipermail/linuxppc64-dev/attachments/20060119/3b4602c5/attachment.pgp 


More information about the Linuxppc64-dev mailing list