sk.syed2 wrote: >> 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? Well there is no warning or panic, pci_alloc_consistent returns NULL if I request 2MB. If I change my request to 1MB then it succeeds, everything is allocated correctly and I can use the memory without issues, but of course the device requires 2MB (well 6 buffers all 2MB in size) so it's of no use. If I attempt to request a second 1MB then pci_alloc_consistent also returns NULL for that second allocation. I have looked at the code for dma_alloc_coherent etc and it seems to me that it's returning null because there isn't the space available to allocate the requested memory. > > 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. I was thinking that this might be the problem, but in order to do that I'd have to put the alloc_bootmem in core kernel code wouldn't I? This doesn't seem very appealing. > Is the driver using the memory for DMA? Are you using the memory > returned by alloc_bootmem directly? Yes, it is used for DMA and I am 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. Yes, I was aware that dma uses physical addresses, isn't that what alloc_bootmem returns? I'm not aware of dma_map_single etc I will look at that soon. > Also does the h/w has any limitations of the physical memory range it > can access? Like only first 64MB of RAM? It's limited to 32bit addressing, but that should be fine for the 512mb of ram on the arm board which I have. Thanks, Phil _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies