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.