[regression] in linux-next: sh_mobile_ceu_camera broken by "ARM: Prohibit ioremap() on kernel managed RAM"
Guennadi Liakhovetski
g.liakhovetski at gmx.de
Wed Aug 18 16:31:10 EDT 2010
On Wed, 18 Aug 2010, Russell King - ARM Linux wrote:
> On Wed, Aug 18, 2010 at 09:23:25PM +0200, Guennadi Liakhovetski wrote:
[snip]
> > The sole purpose of the preallocation in the platform code is to avoid
> > memory fragmentation. Sorry, if I'm repeating obvious things. So, we are
> > already allocating DMA coherent memory. The ioremap() problem in this case
> > is actually bogus - we do not need that ioremap(). The problem would be
> > solved, if ioremap() would just not be called in these cases. This is what
> > the drivers/staging/dt3155v4l/dt3155vfl.c driver is open-coding in its
> > dt3155_alloc_coherent() function, as pointed out by Marin Mitov (CCed) in
> > another thread. So, would it be acceptable to provide a second function,
> > doing exactly the same as dma_declare_coherent_memory() but without an
> > ioremap(), or add a new DMA_MEMORY_... flag to skip ioremap() in
> > dma_declare_coherent_memory(), as suggested by Uwe (CCed too)?
>
> Sounds like a sane approach to fixing this to me.
I assume, you mean adding a new flag to skip ioremap(). But then we have
to pass the virtual address to the function. Its prototype is
int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
dma_addr_t device_addr, size_t size, int flags);
bus_addr is unused in this case, but I don't think abusing it to pass a
"void *" would be an acceptable solution - apart from all the ugly
type-casting, if we ever get 64-bit virtual addresses on ARM with 32-bit
DMA addresses, we've got a problem. Or is this never going to happen? Or
whould I rather add a new function?
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
More information about the linux-arm-kernel
mailing list