summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorFeng Kan <fkan@apm.com>2015-02-24 23:40:21 (GMT)
committerCatalin Marinas <catalin.marinas@arm.com>2015-02-26 18:30:12 (GMT)
commit6910fa16dbe142f6a0fd0fd7c249f9883ff7fc8a (patch)
treeb58bb94c3ef9eb9ee54dc391eef9571abc1668d8 /arch
parent06ff87bae8d30ab9c949ae8729355323e18107b4 (diff)
downloadlinux-6910fa16dbe142f6a0fd0fd7c249f9883ff7fc8a.tar.xz
arm64: enable PTE type bit in the mask for pte_modify
Caught during Trinity testing. The pte_modify does not allow modification for PTE type bit. This cause the test to hang the system. It is found that the PTE can't transit from an inaccessible page (b00) to a valid page (b11) because the mask does not allow it. This happens when a big block of mmaped memory is set the PROT_NONE, then the a small piece is broken off and set to PROT_WRITE | PROT_READ cause a huge page split. Signed-off-by: Feng Kan <fkan@apm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm64/include/asm/pgtable.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 16449c5..800ec0e 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
{
const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
- PTE_PROT_NONE | PTE_VALID | PTE_WRITE;
+ PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK;
pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
return pte;
}