The patch titled Subject: mm: move vma_is_anonymous check within pmd_move_must_withdraw has been added to the -mm tree. Its filename is mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Subject: mm: move vma_is_anonymous check within pmd_move_must_withdraw Independent of whether the vma is for anonymous memory, some arches like ppc64 would like to override pmd_move_must_withdraw(). One option is to encapsulate the vma_is_anonymous() check for general architectures inside pmd_move_must_withdraw() so that is always called and architectures that need unconditional overriding can override this function. ppc64 needs to override the function when the MMU is configured to use hash PTE's. [bsingharora@xxxxxxxxx: reworked changelog] Link: http://lkml.kernel.org/r/20161113150025.17942-1-aneesh.kumar@xxxxxxxxxxxxxxxxxx Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Acked-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx> (powerpc) Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Cc: Michael Neuling <mikey@xxxxxxxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Cc: Balbir Singh <bsingharora@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/powerpc/include/asm/book3s/64/pgtable.h | 3 +- include/asm-generic/pgtable.h | 12 ----------- mm/huge_memory.c | 18 +++++++++++++++-- 3 files changed, 18 insertions(+), 15 deletions(-) diff -puN arch/powerpc/include/asm/book3s/64/pgtable.h~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw arch/powerpc/include/asm/book3s/64/pgtable.h --- a/arch/powerpc/include/asm/book3s/64/pgtable.h~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw +++ a/arch/powerpc/include/asm/book3s/64/pgtable.h @@ -1009,7 +1009,8 @@ static inline void pmdp_huge_split_prepa #define pmd_move_must_withdraw pmd_move_must_withdraw struct spinlock; static inline int pmd_move_must_withdraw(struct spinlock *new_pmd_ptl, - struct spinlock *old_pmd_ptl) + struct spinlock *old_pmd_ptl, + struct vm_area_struct *vma) { if (radix_enabled()) return false; diff -puN include/asm-generic/pgtable.h~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw include/asm-generic/pgtable.h --- a/include/asm-generic/pgtable.h~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw +++ a/include/asm-generic/pgtable.h @@ -653,18 +653,6 @@ static inline pmd_t pmd_read_atomic(pmd_ } #endif -#ifndef pmd_move_must_withdraw -static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl, - spinlock_t *old_pmd_ptl) -{ - /* - * With split pmd lock we also need to move preallocated - * PTE page table if new_pmd is on different PMD page table. - */ - return new_pmd_ptl != old_pmd_ptl; -} -#endif - /* * This function is meant to be used by sites walking pagetables with * the mmap_sem hold in read mode to protect against MADV_DONTNEED and diff -puN mm/huge_memory.c~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw mm/huge_memory.c --- a/mm/huge_memory.c~mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw +++ a/mm/huge_memory.c @@ -1428,6 +1428,21 @@ int zap_huge_pmd(struct mmu_gather *tlb, return 1; } +#ifndef pmd_move_must_withdraw +static inline int pmd_move_must_withdraw(spinlock_t *new_pmd_ptl, + spinlock_t *old_pmd_ptl, + struct vm_area_struct *vma) +{ + /* + * With split pmd lock we also need to move preallocated + * PTE page table if new_pmd is on different PMD page table. + * + * We also don't deposit and withdraw tables for file pages. + */ + return (new_pmd_ptl != old_pmd_ptl) && vma_is_anonymous(vma); +} +#endif + bool move_huge_pmd(struct vm_area_struct *vma, unsigned long old_addr, unsigned long new_addr, unsigned long old_end, pmd_t *old_pmd, pmd_t *new_pmd, bool *need_flush) @@ -1465,8 +1480,7 @@ bool move_huge_pmd(struct vm_area_struct pmd = pmdp_huge_get_and_clear(mm, old_addr, old_pmd); VM_BUG_ON(!pmd_none(*new_pmd)); - if (pmd_move_must_withdraw(new_ptl, old_ptl) && - vma_is_anonymous(vma)) { + if (pmd_move_must_withdraw(new_ptl, old_ptl, vma)) { pgtable_t pgtable; pgtable = pgtable_trans_huge_withdraw(mm, old_pmd); pgtable_trans_huge_deposit(mm, new_pmd, pgtable); _ Patches currently in -mm which might be from aneesh.kumar@xxxxxxxxxxxxxxxxxx are mm-hugetlb-use-the-right-pte-val-for-compare-in-hugetlb_cow.patch mm-hugetlb-use-huge_pte_lock-instead-of-opencoding-the-lock.patch mm-use-the-correct-page-size-when-removing-the-page.patch mm-update-mmu_gather-range-correctly.patch mm-hugetlb-add-tlb_remove_hugetlb_entry-for-handling-hugetlb-pages.patch mm-add-tlb_remove_check_page_size_change-to-track-page-size-change.patch mm-remove-the-page-size-change-check-in-tlb_remove_page.patch mm-move-vma_is_anonymous-check-within-pmd_move_must_withdraw.patch mm-thp-page-cache-support-for-ppc64.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html