Re: allocating memory at boot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 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

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux