|
@@ -146,8 +146,7 @@ static inline unsigned long pmd_pfn(pmd_t pmd)
|
|
|
|
|
|
static inline int pmd_large(pmd_t pte)
|
|
|
{
|
|
|
- return (pmd_flags(pte) & (_PAGE_PSE | _PAGE_PRESENT)) ==
|
|
|
- (_PAGE_PSE | _PAGE_PRESENT);
|
|
|
+ return pmd_flags(pte) & _PAGE_PSE;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
|
@@ -415,7 +414,13 @@ static inline int pte_hidden(pte_t pte)
|
|
|
|
|
|
static inline int pmd_present(pmd_t pmd)
|
|
|
{
|
|
|
- return pmd_flags(pmd) & _PAGE_PRESENT;
|
|
|
+ /*
|
|
|
+ * Checking for _PAGE_PSE is needed too because
|
|
|
+ * split_huge_page will temporarily clear the present bit (but
|
|
|
+ * the _PAGE_PSE flag will remain set at all times while the
|
|
|
+ * _PAGE_PRESENT bit is clear).
|
|
|
+ */
|
|
|
+ return pmd_flags(pmd) & (_PAGE_PRESENT | _PAGE_PROTNONE | _PAGE_PSE);
|
|
|
}
|
|
|
|
|
|
static inline int pmd_none(pmd_t pmd)
|