diff options
-rw-r--r-- | arch/powerpc/include/asm/book3s/64/pgtable.h | 10 |
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 | */ | ||
611 | static inline int pte_devmap(pte_t pte) | 617 | static 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 | ||
616 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 624 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |