diff options
Diffstat (limited to 'include/asm-generic/pgtable.h')
| -rw-r--r-- | include/asm-generic/pgtable.h | 31 | 
1 files changed, 23 insertions, 8 deletions
| diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 1ec08c198b66..a8015a7a55bb 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h @@ -693,24 +693,35 @@ static inline int pmd_numa(pmd_t pmd)  #ifndef pte_mknonnuma  static inline pte_t pte_mknonnuma(pte_t pte)  { -	pte = pte_clear_flags(pte, _PAGE_NUMA); -	return pte_set_flags(pte, _PAGE_PRESENT|_PAGE_ACCESSED); +	pteval_t val = pte_val(pte); + +	val &= ~_PAGE_NUMA; +	val |= (_PAGE_PRESENT|_PAGE_ACCESSED); +	return __pte(val);  }  #endif  #ifndef pmd_mknonnuma  static inline pmd_t pmd_mknonnuma(pmd_t pmd)  { -	pmd = pmd_clear_flags(pmd, _PAGE_NUMA); -	return pmd_set_flags(pmd, _PAGE_PRESENT|_PAGE_ACCESSED); +	pmdval_t val = pmd_val(pmd); + +	val &= ~_PAGE_NUMA; +	val |= (_PAGE_PRESENT|_PAGE_ACCESSED); + +	return __pmd(val);  }  #endif  #ifndef pte_mknuma  static inline pte_t pte_mknuma(pte_t pte)  { -	pte = pte_set_flags(pte, _PAGE_NUMA); -	return pte_clear_flags(pte, _PAGE_PRESENT); +	pteval_t val = pte_val(pte); + +	val &= ~_PAGE_PRESENT; +	val |= _PAGE_NUMA; + +	return __pte(val);  }  #endif @@ -729,8 +740,12 @@ static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,  #ifndef pmd_mknuma  static inline pmd_t pmd_mknuma(pmd_t pmd)  { -	pmd = pmd_set_flags(pmd, _PAGE_NUMA); -	return pmd_clear_flags(pmd, _PAGE_PRESENT); +	pmdval_t val = pmd_val(pmd); + +	val &= ~_PAGE_PRESENT; +	val |= _PAGE_NUMA; + +	return __pmd(val);  }  #endif |