diff options
Diffstat (limited to 'arch/x86/include/asm/pgtable.h')
| -rw-r--r-- | arch/x86/include/asm/pgtable.h | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index fc994846529..a1f780d45f7 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -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)  |