Thread (6 messages) 6 messages, 2 authors, 2011-02-22

allocating memory at boot

From: sk.syed2 <hidden>
Date: 2011-02-17 21:32:37

I'm currently trying to port a (currently for unreleased hardware and
under nda) driver from x86 to arm and in doing so I've run into a
problem with allocating memory using pci_alloc_consistent. Looking into
it I can't allocate more than 1MB whereas I need to allocate at least
2MB of contiguous memory.
   I guess pci_alloc_consistent calls dma_alloc_coherent, so why does
it fail to allocate 2MB of memory?
What is the error do you see?

Looking further into it, the conventional
method to get around this at the moment seems to be to statically link
the driver into the kernel and use alloc_bootmem or alloc_bootmem_low
(mentioned in ldd3 and all over google).

The problem I've run into however is that I get a warning at boot which is:

WARNING: at mm/bootmem.c:672 alloc_arch_preferred_bootmem+0x34/0x64()
You need to call alloc_bootmem at an early stage before slab is initialized.
Looking at that code in bootmem.c this is a warning which I think is
there to tell me that SLAB is available and warn against trying to
allocate at boot. However it reportedly allocates the memory but when
the driver tries to use this memory later, then the system hangs.
Is the driver using the memory for DMA? Are you using the memory
returned by alloc_bootmem directly?
Remember DMA works on physical addresses not virtual. You might have
to use dma_map_single/dma_unmap_single.
Also does the h/w has any limitations of the physical memory range it
can access? Like only first 64MB of RAM?


regards
-syed
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help