ARM: 7418/1: LPAE: fix access flag setup in mem_type_table
authorVitaly Andrianov <vitalya@ti.com>
Tue, 15 May 2012 14:01:16 +0000 (15:01 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 17 May 2012 13:48:56 +0000 (14:48 +0100)
A zero value for prot_sect in the memory types table implies that
section mappings should never be created for the memory type in question.
This is checked for in alloc_init_section().

With LPAE, we set a bit to mask access flag faults for kernel mappings.
This breaks the aforementioned (!prot_sect) check in alloc_init_section().

This patch fixes this bug by first checking for a non-zero
prot_sect before setting the PMD_SECT_AF flag.

Signed-off-by: Vitaly Andrianov <vitalya@ti.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/mmu.c

index 2c7cf2f9c837263504b139e44137ac027724bd0e..aa78de8bfdd3b86e6b34d7cbecd2de3393e50ba5 100644 (file)
@@ -489,7 +489,8 @@ static void __init build_mem_type_table(void)
         */
        for (i = 0; i < ARRAY_SIZE(mem_types); i++) {
                mem_types[i].prot_pte |= PTE_EXT_AF;
-               mem_types[i].prot_sect |= PMD_SECT_AF;
+               if (mem_types[i].prot_sect)
+                       mem_types[i].prot_sect |= PMD_SECT_AF;
        }
        kern_pgprot |= PTE_EXT_AF;
        vecs_pgprot |= PTE_EXT_AF;