[Barrelfish-users] various boot issues (was: skb problems booting on x86_32: can't find Eclipse?)

Kornilios Kourtis kornilios.kourtis at inf.ethz.ch
Thu Aug 15 09:56:28 CEST 2013


Hi Malte,

On Wed, Aug 14, 2013 at 02:53:46PM +0100, Malte Schwarzkopf wrote:
> Hi Manuel, Simon and others,
> 
> Thanks a lot for getting back to me! I'll dig a little deeper on the 
> 64-bit side of things; the use of the x86_32 machine was mainly due to a 
> shortage of suitable hardware, and it's not blocking anything if that 
> one doesn't work (I'll dig into it nonetheless if I get a chance, though).
> 
> I tried booting (with the debug flags turned on) on one of our latest 
> Sandy Bridge Intel machines, and got the below output, crashing 
> somewhere in startup_arch.c:
> 
> --------------8<--------------------
[snip]
> kernel 0 PANIC! kernel assertion "err_is_ok(err)" failed at 
> ../kernel/arch/x86_64/startup_arch.c:421
[snip]
> --------------8<--------------------
> 
> Having glanced over this, all seems good: all regions are page-aligned, 
> and correctly sorted after preprocessing.
> 
> The failure appears to be in the code creating caps for the region that 
> was figured out to be RAM; and specifically, space for caps seems to be 
> running out (?). This might be plausible: the machine I ran this on has 
> 128 GB of RAM. Is there maybe some size limitation on a data structure 
> holding the caps? I would have thought that the top-level RAM capability 
> should only use up (and only massive fragmentation would lead to 
> problems on machines with lots of RAM), but my understanding of the 
> Barrelfish capability system is, euphemistically put, limited ;-)
> 
> Any ideas?

Indeed the problem seems to be what you describe (root cnode runs out of
space) and I'm afraid we do not have a good solution at this point. If I
remember correctly, supercn can hold 32 entries.

As a workaround, I would suggest removing the assertion. Not all memory
will be used, but you should be able to boot and use the machine. If the
memory mapped is not enough, you can tinker with the code to maximize the
mapped memory. For example, you can modify create_caps_to_cnode() to
terminate the while loop when a minimum remaining size is reached instead
of mapping the whole region to avoid creating small frame capabilities.


cheers,
Kornilios.

-- 
Kornilios Kourtis



More information about the Barrelfish-users mailing list