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