[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

wortel problems

From: Johan Rydberg
Subject: wortel problems
Date: Wed, 1 Oct 2003 04:10:37 +0200


I have some small problems with wortel(+sigma0+physmem) that someone
might be able to help me with.

>From wortel.c, function serve_bootstrap_requests:

  /* Allocate a single page at address 0, because we don't want to
     bother anybody with that silly page.  */
  sigma0_get_fpage (l4_fpage (0, l4_min_page_size ()));

I'm not really sure why this is done, but it's not valid for PowerPC 
(region 0-0x3000 is used for exception vectors, and sigma0 treats it
as reserved.)   Why does it allocate and throw away page zero? I've 
just commented out this piece of code for the moment.

Next thing, same file, same function:

  /* Give out the memory.  First our unused fpages, then the
     fpages we can get from sigma0.  */
  if (wortel_unused_fpages_count)
    fpage = wortel_unused_fpages[--wortel_unused_fpages_count];
        fpage = sigma0_get_any (get_mem_size);
        if (fpage.raw == l4_nilpage.raw)
    while (fpage.raw == l4_nilpage.raw
           && get_mem_size >= L4_MIN_PAGE_SIZE_LOG2);

I don't know if something is failing in the communication between
wortel and sigma0, but requesting a block of memory with the size
if (1 << 31) makes the kernel break into the kernel debugger with
the following message:

  map_fpage(from=c0043000, to=c004a000, base=0, sndfp=800001f7, rcvfp=10)
  --- KD# map_fpage(): Mapping already exists. ---

Any clues?

Related problem:

If I change the code to get a single page (instead of 2^31, 2^30, ...)
each time, it works, but only one time -- the physmem server faults on 
the retrived page and sends an exception to the rootserver, which panics 
since the sender don't have a valid capability (msg word 0 is 65506.)

Do anyone have a clue what can be wrong?

This only happens for pages received from sigma0.  Unused wortel pages
that is handed to physmem works alright, but it isn't any huge amout of
memory as you can see below (output from physmem) :

  physmem: 0x10000: { 290000 }
  physmem: 0x8000: { }
  physmem: 0x4000: { }
  physmem: 0x2000: { }
  physmem: 0x1000: { 216000, 2a0000 }
  physmem: 73728 (0x12000) bytes available

Johan Rydberg, Free Software Developer, Sweden
http://rtmk.sf.net | http://www.nongnu.org/guss/

Playing Cooper Temple Clause - Who Needs Enemies?

reply via email to

[Prev in Thread] Current Thread [Next in Thread]