Memory descriptor overflow

"Christian, Martin, OPEE45" <[email protected]>
Newsgroups gmane.comp.micro-kernel.l4.l4ka.general
Message-ID <[email protected]>
Hi,
I'm working with the CVS Pistachio from maybe a month ago. When I boot
the kernel on a PowerPC I get a "Memory descriptor overflow" error:

<termdump>
[==== Pistachio PowerPC Open Firmware Boot Loader ====]
[==== Installing sigma0 ====]
- virt addr: 00200000, phys addr: 00200000, mem size: 00007284
  file size: 00004f24, file offset: 00000060
- ip: 00200000,  start: 00200000,  end: 00208000
[==== Installing the root task ====]
- virt addr: 00300000, phys addr: 00300000, mem size: 0000d200
  file size: 000041ac, file offset: 00000060
- ip: 00300000,  start: 00300000,  end: 0030e000
[==== Installing the kernel ====]
- virt addr: c0003100, phys addr: 00003100, mem size: 00001678
  file size: 00001678, file offset: 00003100
- virt addr: c0005778, phys addr: 00005778, mem size: 00039930
  file size: 00039930, file offset: 00005778
- virt addr: c00400a8, phys addr: 000400a8, mem size: 00005494
  file size: 00001178, file offset: 000400a8
- virt addr: d4000000, phys addr: 00060000, mem size: 00001004
  file size: 00001004, file offset: 00050000
- skipping an unloadable elf section: virt=: 00000000
- ip: c0005848,  start: 00003000,  end: 00062000
[==== Found the kernel interface page ====]
- kip virt: c0041000, kip phys: 00041000, kip size: 00000418
Kernel physical entry point: 00005848

[ L4 PowerPC ]
Activated MPSC debug console.
Initializing Kernel Debugger.
kmem_init (c0062000, c00e2000) [512K]
Kernel boot mem: 638976 bytes
Define user's virtual address space.
Memory descriptor overflow (max=460, n=40960)
</termdump>

The error occurs in method "bool memory_info_t::insert()". At the time
the error occurs it is called within "kip_mem_init()":
<code>
	// Define the user's virtual address space.
	TRACE_INIT( "Define user's virtual address space.\n" );
	kip->memory_info.insert( memdesc_t::conventional, true,
	                         (addr_t)0, (addr_t)KERNEL_OFFSET );
</code>
This is where the first 3 GB are dedicated to the user, if in user mode.

My questions are about this expression <code>if (n >= max_desc)</code>
in "bool memory_info_t::insert()":

1.) How (and where) is "n" calculated?
2.) Did I get it right that "max_desc" is calculated by the linker to
hold the number of bytes remaining in the 4K sized kernel data section
divided by the number of memory descriptors?

Cheers,

Martin.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.