Hi David,

Zitat von David McCullough <[EMAIL PROTECTED]>:
Jivin Markus Franke lays it down ...
Yes,  despite the code you mention below,  the mem_map will get
allocated at the start of memory,   the only was around this would be
to look at discontiguous memory regions,  or to see if you can delay
calling free_bootmem(0x0, 0x00FFFFFF) until after the mem_map is
allocated.

My bootmap doesn't start at the beginning of memory!!! I allocate the bootmap similar to other architectures by calling:

init_bootmem_node( NODE_DATA(0),
                   memory_start >> PAGE_SHIFT,
                   PAGE_OFFSET >> PAGE_SHIFT
                   memory_end >> PAGE_SHIFT);

memory_start equals to the first possible address in RAM right after the linux image. (somewhere around 0x01100000) The remaining two parameters specify the address range of my SDRAM (0 - 0x4000000)
After this I make a call to:

free_bootmem(memory_start, memory_end - memory_start);
reserve_bootmem(memory_start, bootmap_size);

This should ensure that the memory area behind my linux image gets freed up for memory allocations but the tiny piece of the bootmem_map get's reserved again. Till here everything works fine.
The next step is:

free_bootmem(0x0, 0x00FFFFFF);

which simply makes linux hanging. However when I call

free_bootmem(0x1, 0x00FFFFFF - 0x1);

everything works fine. Linux is booting and all DMA allocations work perfectly. Where is the problem? Is the first argument not allowed to equal to 0???

With best regards,
Markus Franke



_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to