__arm_ioremap creates page table with domain set to kernel

Nicolas Pitre nico at fluxnic.net
Fri Jan 21 23:00:41 EST 2011


On Fri, 21 Jan 2011, Colin Cross wrote:

> On Fri, Jan 21, 2011 at 7:37 PM, Nicolas Pitre <nico at fluxnic.net> wrote:
> > On Fri, 21 Jan 2011, Colin Cross wrote:
> >
> >> If this is a real problem, I don't see any quick fix.  The domain bits
> >> are set in the pmd, so ioremapped memory can not share a pmd with
> >> regular vmalloc memory, and ioremap_page_range has no way to carry a
> >> domain to pte_alloc_kernel.
> >
> > This has been fixed already. Have a look at:
> >
> > |commit 247055aa21ffef1c49dd64710d5e94c2aee19b58
> > |Author: Catalin Marinas <catalin.marinas at arm.com>
> > |Date:   Mon Sep 13 16:03:21 2010 +0100
> > |
> > |    ARM: 6384/1: Remove the domain switching on ARMv6k/v7 CPUs
> > |
> > |[...]
> 
> Ah, thanks.  For the linux-tegra-2.6.36 kernel I worked around the
> problem by statically mapping all of the IO regions and preventing
> ioremaps outside of the static mappings or physical memory.

Beware that the ARM ARM also mention that multiple mappings of the same 
physical memory but with different caching attributes is undefined.  So 
you should not ioremap memory if it is already mapped in the direct 
kernel memory space.  I think 2.6.36 would produce a warning, but now 
this also returns NULL.


Nicolas


More information about the linux-arm-kernel mailing list