Hard-coded virtual address used by dma_alloc_coherent

3 messages, 2 authors, 2008-07-24 · open the first message on its own page

Hard-coded virtual address used by dma_alloc_coherent

From: Remi Machet <hidden>
Date: 2008-07-24 19:19:16

Hi,

I have noticed that the DMA allocation for non-coherent PowerPC
architecture is using a hard coded virtual memory address for its memory
pool. This address is typically 0xFF100000 (set by
CONFIG_CONSISTENT_START) and can conflict with early ioremap in systems
that enable HIGHMEM.

Is there any reason why we have to use an arbitrary virtual address ? If
the virtual address must be known at compile time, can't we use fixmap ?

I also can't figure out why we need to use a virtual address known at
compilation time and cannot just allocate pages using get_free_pages and
mark them as non cacheable and non swappable.

For those of you that want to check it out, the code is in
arch/powerpc/lib/dma-noncoherent.c

Thanks,

Remi

Re: Hard-coded virtual address used by dma_alloc_coherent

From: Scott Wood <hidden>
Date: 2008-07-24 19:30:49

Remi Machet wrote:
I have noticed that the DMA allocation for non-coherent PowerPC
architecture is using a hard coded virtual memory address for its memory
pool. This address is typically 0xFF100000 (set by
CONFIG_CONSISTENT_START) and can conflict with early ioremap in systems
that enable HIGHMEM.

Is there any reason why we have to use an arbitrary virtual address ? If
the virtual address must be known at compile time, can't we use fixmap ?
The hardcoded address predates when fixmap was added to powerpc.  It 
should be updated to use fixmap.
I also can't figure out why we need to use a virtual address known at
compilation time and cannot just allocate pages using get_free_pages and
mark them as non cacheable and non swappable.
We probably don't need a compile-time address, though we can't just 
change the page attributes in-place as the pages will often covered by 
large TLB entries.

-Scott

Re: Hard-coded virtual address used by dma_alloc_coherent

From: Remi Machet <hidden>
Date: 2008-07-24 21:43:35

On Thu, 2008-07-24 at 14:29 -0500, Scott Wood wrote:
Remi Machet wrote:
quoted
I have noticed that the DMA allocation for non-coherent PowerPC
architecture is using a hard coded virtual memory address for its memory
pool. This address is typically 0xFF100000 (set by
CONFIG_CONSISTENT_START) and can conflict with early ioremap in systems
that enable HIGHMEM.

Is there any reason why we have to use an arbitrary virtual address ? If
the virtual address must be known at compile time, can't we use fixmap ?
The hardcoded address predates when fixmap was added to powerpc.  It 
should be updated to use fixmap.
Ok, I will look into that.
quoted
I also can't figure out why we need to use a virtual address known at
compilation time and cannot just allocate pages using get_free_pages and
mark them as non cacheable and non swappable.
We probably don't need a compile-time address, though we can't just 
change the page attributes in-place as the pages will often covered by 
large TLB entries.
If we use alloc_pages to allocate the physical memory and get_vm_area to
get a virtual address (and its associated PTE), wouldn't map_vm_area
take care of breaking the TLB into smaller chunks if necessary ?

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