|
@@ -244,10 +244,6 @@ static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
|
|
|
# define pte_accessible(mm, pte) ((void)(pte), 1)
|
|
|
#endif
|
|
|
|
|
|
-#ifndef pte_present_nonuma
|
|
|
-#define pte_present_nonuma(pte) pte_present(pte)
|
|
|
-#endif
|
|
|
-
|
|
|
#ifndef flush_tlb_fix_spurious_fault
|
|
|
#define flush_tlb_fix_spurious_fault(vma, address) flush_tlb_page(vma, address)
|
|
|
#endif
|
|
@@ -693,157 +689,6 @@ static inline int pmd_protnone(pmd_t pmd)
|
|
|
}
|
|
|
#endif /* CONFIG_NUMA_BALANCING */
|
|
|
|
|
|
-#ifdef CONFIG_NUMA_BALANCING
|
|
|
-/*
|
|
|
- * _PAGE_NUMA distinguishes between an unmapped page table entry, an entry that
|
|
|
- * is protected for PROT_NONE and a NUMA hinting fault entry. If the
|
|
|
- * architecture defines __PAGE_PROTNONE then it should take that into account
|
|
|
- * but those that do not can rely on the fact that the NUMA hinting scanner
|
|
|
- * skips inaccessible VMAs.
|
|
|
- *
|
|
|
- * pte/pmd_present() returns true if pte/pmd_numa returns true. Page
|
|
|
- * fault triggers on those regions if pte/pmd_numa returns true
|
|
|
- * (because _PAGE_PRESENT is not set).
|
|
|
- */
|
|
|
-#ifndef pte_numa
|
|
|
-static inline int pte_numa(pte_t pte)
|
|
|
-{
|
|
|
- return ptenuma_flags(pte) == _PAGE_NUMA;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef pmd_numa
|
|
|
-static inline int pmd_numa(pmd_t pmd)
|
|
|
-{
|
|
|
- return pmdnuma_flags(pmd) == _PAGE_NUMA;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-/*
|
|
|
- * pte/pmd_mknuma sets the _PAGE_ACCESSED bitflag automatically
|
|
|
- * because they're called by the NUMA hinting minor page fault. If we
|
|
|
- * wouldn't set the _PAGE_ACCESSED bitflag here, the TLB miss handler
|
|
|
- * would be forced to set it later while filling the TLB after we
|
|
|
- * return to userland. That would trigger a second write to memory
|
|
|
- * that we optimize away by setting _PAGE_ACCESSED here.
|
|
|
- */
|
|
|
-#ifndef pte_mknonnuma
|
|
|
-static inline pte_t pte_mknonnuma(pte_t pte)
|
|
|
-{
|
|
|
- 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)
|
|
|
-{
|
|
|
- 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)
|
|
|
-{
|
|
|
- pteval_t val = pte_val(pte);
|
|
|
-
|
|
|
- VM_BUG_ON(!(val & _PAGE_PRESENT));
|
|
|
-
|
|
|
- val &= ~_PAGE_PRESENT;
|
|
|
- val |= _PAGE_NUMA;
|
|
|
-
|
|
|
- return __pte(val);
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef ptep_set_numa
|
|
|
-static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
|
- pte_t *ptep)
|
|
|
-{
|
|
|
- pte_t ptent = *ptep;
|
|
|
-
|
|
|
- ptent = pte_mknuma(ptent);
|
|
|
- set_pte_at(mm, addr, ptep, ptent);
|
|
|
- return;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef pmd_mknuma
|
|
|
-static inline pmd_t pmd_mknuma(pmd_t pmd)
|
|
|
-{
|
|
|
- pmdval_t val = pmd_val(pmd);
|
|
|
-
|
|
|
- val &= ~_PAGE_PRESENT;
|
|
|
- val |= _PAGE_NUMA;
|
|
|
-
|
|
|
- return __pmd(val);
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifndef pmdp_set_numa
|
|
|
-static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
|
- pmd_t *pmdp)
|
|
|
-{
|
|
|
- pmd_t pmd = *pmdp;
|
|
|
-
|
|
|
- pmd = pmd_mknuma(pmd);
|
|
|
- set_pmd_at(mm, addr, pmdp, pmd);
|
|
|
- return;
|
|
|
-}
|
|
|
-#endif
|
|
|
-#else
|
|
|
-static inline int pmd_numa(pmd_t pmd)
|
|
|
-{
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static inline int pte_numa(pte_t pte)
|
|
|
-{
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static inline pte_t pte_mknonnuma(pte_t pte)
|
|
|
-{
|
|
|
- return pte;
|
|
|
-}
|
|
|
-
|
|
|
-static inline pmd_t pmd_mknonnuma(pmd_t pmd)
|
|
|
-{
|
|
|
- return pmd;
|
|
|
-}
|
|
|
-
|
|
|
-static inline pte_t pte_mknuma(pte_t pte)
|
|
|
-{
|
|
|
- return pte;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
|
- pte_t *ptep)
|
|
|
-{
|
|
|
- return;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-static inline pmd_t pmd_mknuma(pmd_t pmd)
|
|
|
-{
|
|
|
- return pmd;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
|
|
|
- pmd_t *pmdp)
|
|
|
-{
|
|
|
- return ;
|
|
|
-}
|
|
|
-#endif /* CONFIG_NUMA_BALANCING */
|
|
|
-
|
|
|
#endif /* CONFIG_MMU */
|
|
|
|
|
|
#endif /* !__ASSEMBLY__ */
|