On 27/03/13 14:11, Catalin Marinas wrote: > On Tue, Mar 26, 2013 at 05:00:57PM +0000, Marc Zyngier wrote: >> --- a/arch/arm64/mm/mmu.c >> +++ b/arch/arm64/mm/mmu.c >> @@ -44,6 +44,7 @@ struct page *empty_zero_page; >> EXPORT_SYMBOL(empty_zero_page); >> >> pgprot_t pgprot_default; >> +pgprot_t pgprot_device; >> EXPORT_SYMBOL(pgprot_default); >> >> static pmdval_t prot_sect_kernel; >> @@ -127,10 +128,11 @@ early_param("cachepolicy", early_cachepolicy); >> */ >> static void __init init_mem_pgprot(void) >> { >> - pteval_t default_pgprot; >> + pteval_t default_pgprot, device_pgprot; >> int i; >> >> default_pgprot = PTE_ATTRINDX(MT_NORMAL); >> + device_pgprot = PTE_ATTRINDX(MT_DEVICE_nGnRE) | PTE_PXN | PTE_UXN; >> prot_sect_kernel = PMD_TYPE_SECT | PMD_SECT_AF | PMD_ATTRINDX(MT_NORMAL); >> >> #ifdef CONFIG_SMP >> @@ -138,6 +140,7 @@ static void __init init_mem_pgprot(void) >> * Mark memory with the "shared" attribute for SMP systems >> */ >> default_pgprot |= PTE_SHARED; >> + device_pgprot |= PTE_SHARED; >> prot_sect_kernel |= PMD_SECT_S; >> #endif >> >> @@ -147,6 +150,7 @@ static void __init init_mem_pgprot(void) >> } >> >> pgprot_default = __pgprot(PTE_TYPE_PAGE | PTE_AF | default_pgprot); >> + pgprot_device = __pgprot(PTE_TYPE_PAGE | PTE_AF | device_pgprot); >> } > > I don't think all this pgprot_device addition is needed. According to > the ARMv8 Translation spec, any shareability attributes for Device > memory are ignored as the memory is always regarded as Outer Shareable. > That's why the ioremap() implementation on arm64 only uses pre-defined > constants. Right. That makes it much simpler then. I'll drop this part and update the relevant definitions with PROT_DEVICE_nGnRE instead. Thanks, M. -- Jazz is not dead. It just smells funny... -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html