aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic/pgtable.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-generic/pgtable.h')
-rw-r--r--include/asm-generic/pgtable.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
index db0923458940..34c7bdc06014 100644
--- a/include/asm-generic/pgtable.h
+++ b/include/asm-generic/pgtable.h
@@ -558,6 +558,18 @@ static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
558} 558}
559#endif 559#endif
560 560
561#ifndef pmd_move_must_withdraw
562static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl,
563 spinlock_t *old_pmd_ptl)
564{
565 /*
566 * With split pmd lock we also need to move preallocated
567 * PTE page table if new_pmd is on different PMD page table.
568 */
569 return new_pmd_ptl != old_pmd_ptl;
570}
571#endif
572
561/* 573/*
562 * This function is meant to be used by sites walking pagetables with 574 * This function is meant to be used by sites walking pagetables with
563 * the mmap_sem hold in read mode to protect against MADV_DONTNEED and 575 * the mmap_sem hold in read mode to protect against MADV_DONTNEED and
@@ -689,6 +701,18 @@ static inline pte_t pte_mknuma(pte_t pte)
689} 701}
690#endif 702#endif
691 703
704#ifndef ptep_set_numa
705static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
706 pte_t *ptep)
707{
708 pte_t ptent = *ptep;
709
710 ptent = pte_mknuma(ptent);
711 set_pte_at(mm, addr, ptep, ptent);
712 return;
713}
714#endif
715
692#ifndef pmd_mknuma 716#ifndef pmd_mknuma
693static inline pmd_t pmd_mknuma(pmd_t pmd) 717static inline pmd_t pmd_mknuma(pmd_t pmd)
694{ 718{
@@ -696,6 +720,18 @@ static inline pmd_t pmd_mknuma(pmd_t pmd)
696 return pmd_clear_flags(pmd, _PAGE_PRESENT); 720 return pmd_clear_flags(pmd, _PAGE_PRESENT);
697} 721}
698#endif 722#endif
723
724#ifndef pmdp_set_numa
725static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
726 pmd_t *pmdp)
727{
728 pmd_t pmd = *pmdp;
729
730 pmd = pmd_mknuma(pmd);
731 set_pmd_at(mm, addr, pmdp, pmd);
732 return;
733}
734#endif
699#else 735#else
700extern int pte_numa(pte_t pte); 736extern int pte_numa(pte_t pte);
701extern int pmd_numa(pmd_t pmd); 737extern int pmd_numa(pmd_t pmd);
@@ -703,6 +739,8 @@ extern pte_t pte_mknonnuma(pte_t pte);
703extern pmd_t pmd_mknonnuma(pmd_t pmd); 739extern pmd_t pmd_mknonnuma(pmd_t pmd);
704extern pte_t pte_mknuma(pte_t pte); 740extern pte_t pte_mknuma(pte_t pte);
705extern pmd_t pmd_mknuma(pmd_t pmd); 741extern pmd_t pmd_mknuma(pmd_t pmd);
742extern void ptep_set_numa(struct mm_struct *mm, unsigned long addr, pte_t *ptep);
743extern void pmdp_set_numa(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp);
706#endif /* CONFIG_ARCH_USES_NUMA_PROT_NONE */ 744#endif /* CONFIG_ARCH_USES_NUMA_PROT_NONE */
707#else 745#else
708static inline int pmd_numa(pmd_t pmd) 746static inline int pmd_numa(pmd_t pmd)
@@ -730,10 +768,23 @@ static inline pte_t pte_mknuma(pte_t pte)
730 return pte; 768 return pte;
731} 769}
732 770
771static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr,
772 pte_t *ptep)
773{
774 return;
775}
776
777
733static inline pmd_t pmd_mknuma(pmd_t pmd) 778static inline pmd_t pmd_mknuma(pmd_t pmd)
734{ 779{
735 return pmd; 780 return pmd;
736} 781}
782
783static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
784 pmd_t *pmdp)
785{
786 return ;
787}
737#endif /* CONFIG_NUMA_BALANCING */ 788#endif /* CONFIG_NUMA_BALANCING */
738 789
739#endif /* CONFIG_MMU */ 790#endif /* CONFIG_MMU */