__arm_ioremap creates page table with domain set to kernel

Colin Cross ccross at google.com
Fri Jan 21 23:53:18 EST 2011


On Fri, Jan 21, 2011 at 8:00 PM, Nicolas Pitre <nico at fluxnic.net> wrote:
> 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.

I use memblock_remove on any area of memory that will later be ioremapped.



More information about the linux-arm-kernel mailing list