Re: __arm_ioremap creates page table with domain set to kernel

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

 



On Fri, Jan 21, 2011 at 7:37 PM, Nicolas Pitre <nico@xxxxxxxxxxx> wrote:
> On Fri, 21 Jan 2011, Colin Cross wrote:
>
>> If CONFIG_SMP is set, __arm_ioremap always creates a page table
>> mapping by calling ioremap_page_range in lib/ioremap.c, and passes it
>> the memory prot value but not the domain.  iormap_page_range
>> eventually calls pte_alloc_kernel, which sets the domain to
>> DOMAIN_KERNEL, instead of DOMAIN_IO.
>>
>> The kernel domain is normally set to client, the same as the IO
>> domain, but it can get temporarily switched to manager mode.  When it
>> is in manager mode, it ignores the memory protection bits, and the
>> instruction prefetcher is allowed by the ARMv7 spec to ignore the XN
>> (eXecute Never) bit and fetch from IO memory.  I don't know that this
>> would ever actually occur, but the ARM spec says in B3.6.2:
>>
>> The XN attribute is not checked for domains marked as Manager.
>> Read-sensitive memory must not be
>> included in domains marked as Manager, because the XN bit does not
>> prevent prefetches in these cases.
>>
>> 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@xxxxxxx>
> |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.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux