diff options
Diffstat (limited to 'include/asm-generic/pgtable.h')
-rw-r--r-- | include/asm-generic/pgtable.h | 51 |
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 | ||
562 | static 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 | ||
705 | static 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 |
693 | static inline pmd_t pmd_mknuma(pmd_t pmd) | 717 | static 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 | ||
725 | static 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 |
700 | extern int pte_numa(pte_t pte); | 736 | extern int pte_numa(pte_t pte); |
701 | extern int pmd_numa(pmd_t pmd); | 737 | extern int pmd_numa(pmd_t pmd); |
@@ -703,6 +739,8 @@ extern pte_t pte_mknonnuma(pte_t pte); | |||
703 | extern pmd_t pmd_mknonnuma(pmd_t pmd); | 739 | extern pmd_t pmd_mknonnuma(pmd_t pmd); |
704 | extern pte_t pte_mknuma(pte_t pte); | 740 | extern pte_t pte_mknuma(pte_t pte); |
705 | extern pmd_t pmd_mknuma(pmd_t pmd); | 741 | extern pmd_t pmd_mknuma(pmd_t pmd); |
742 | extern void ptep_set_numa(struct mm_struct *mm, unsigned long addr, pte_t *ptep); | ||
743 | extern 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 |
708 | static inline int pmd_numa(pmd_t pmd) | 746 | static 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 | ||
771 | static inline void ptep_set_numa(struct mm_struct *mm, unsigned long addr, | ||
772 | pte_t *ptep) | ||
773 | { | ||
774 | return; | ||
775 | } | ||
776 | |||
777 | |||
733 | static inline pmd_t pmd_mknuma(pmd_t pmd) | 778 | static inline pmd_t pmd_mknuma(pmd_t pmd) |
734 | { | 779 | { |
735 | return pmd; | 780 | return pmd; |
736 | } | 781 | } |
782 | |||
783 | static 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 */ |