aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/book3s/64/pgtable.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
index d1da415e283c..818a58fc3f4f 100644
--- a/arch/powerpc/include/asm/book3s/64/pgtable.h
+++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
@@ -608,9 +608,17 @@ static inline pte_t pte_mkdevmap(pte_t pte)
608 return __pte(pte_val(pte) | _PAGE_SPECIAL|_PAGE_DEVMAP); 608 return __pte(pte_val(pte) | _PAGE_SPECIAL|_PAGE_DEVMAP);
609} 609}
610 610
611/*
612 * This is potentially called with a pmd as the argument, in which case it's not
613 * safe to check _PAGE_DEVMAP unless we also confirm that _PAGE_PTE is set.
614 * That's because the bit we use for _PAGE_DEVMAP is not reserved for software
615 * use in page directory entries (ie. non-ptes).
616 */
611static inline int pte_devmap(pte_t pte) 617static inline int pte_devmap(pte_t pte)
612{ 618{
613 return !!(pte_raw(pte) & cpu_to_be64(_PAGE_DEVMAP)); 619 u64 mask = cpu_to_be64(_PAGE_DEVMAP | _PAGE_PTE);
620
621 return (pte_raw(pte) & mask) == mask;
614} 622}
615 623
616static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 624static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)