2.6.15 failure on power4 iSeries

Michael Ellerman michael at ellerman.id.au
Sat Jan 21 15:23:27 EST 2006


On Fri, 20 Jan 2006 10:56, you wrote:
> Michael Ellerman wrote:
> > 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?
>
> Yeah, i followed code to that BUG call.. i'm not seeing any bug or panic
> message.

That's curious. :)

> turning on the lmb_dump_all func returns different values depending on how
> far we've gotten.

Yeah that's normal, people are reserving memory as we go and so the reserved 
stuff changes. You shouldn't see the memory.* stuff changing though.

> Initially it returns this: just after entry to early_setup()
> lmb_dump_all:
>      memory.cnt            = 0x1
>      memory.size           = 0x3c800000
>      memory.region[0x0].base       = 0x0
>                        .size     = 0x3c800000
>
>      reserved.cnt          = 0x1
>      reserved.size         = 0x0
>      reserved.region[0x0].base       = 0x0
>                        .size     = 0x500e80

So it thinks you've got just under 1G of RAM, is that about right?

The reserved region will be the kernel text I think.

> just before we call into do_init_bootmem, looks more like this:
> lmb_dump_all:
>      memory.cnt            = 0x1
>      memory.size           = 0x3c800000
>      memory.region[0x0].base       = 0x0
>                        .size     = 0x3c800000
>
>      reserved.cnt          = 0x4
>      reserved.size         = 0x0
>      reserved.region[0x0].base       = 0x0
>                        .size     = 0x500e80
>      reserved.region[0x1].base       = 0xffe5000
>                        .size     = 0x1b000
>      reserved.region[0x2].base       = 0x3c7ff668
>                        .size     = 0x994
>      reserved.region[0x3].base       = 0x3c800000
>                        .size     = 0x0

That last reserved region looks bogus (obviously). It'd be _really_ 
interesting to know who's adding that. You might be able to hack something 
with DBG to print __builtin_return_address() or whatever it is, to get the 
caller of lmb_reserve.

> Tried adding this debug to an earlier working kernel, but wasnt able to get
> output. I think i'm at a point before the CONFIG_PPC_EARLY_DEBUG_ISERIES
> config option existed.

Yep, it's pretty new. We could hack up iSeries early debug for older kernels 
if we wanted, what's the latest kernel that worked?

> notice that the partition memory size happens to be the same as the .base
> of our last region.  (memory.size , and physicalMemorySize value) (is there
> a bad assumption somewhere and we're squishing the size with
> lmb_enforce_memory_limit()?, or the overlaps_region? )

Yeah that looks weird doesn't it. I'm internet caf'ing it at the moment, so 
will have a look tonight and get back to you.

cheers

-- 
Michael Ellerman
IBM OzLabs

email: michael:ellerman.id.au
inmsg: mpe:jabber.org
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)

We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
-------------- 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/20060121/4f3cd0c2/attachment.pgp 


More information about the Linuxppc64-dev mailing list