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.

-- 
Catalin
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to