The patch titled Subject: mm/vma: make is_vma_temporary_stack() available for general use has been added to the -mm tree. Its filename is mm-vma-make-is_vma_temporary_stack-available-for-general-use.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-vma-make-is_vma_temporary_stack-available-for-general-use.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-vma-make-is_vma_temporary_stack-available-for-general-use.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/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Anshuman Khandual <anshuman.khandual@xxxxxxx> Subject: mm/vma: make is_vma_temporary_stack() available for general use Currently the declaration and definition for is_vma_temporary_stack() are scattered. Lets make is_vma_temporary_stack() helper available for general use and also drop the declaration from (include/linux/huge_mm.h) which is no longer required. While at this, rename this as vma_is_temporary_stack() in line with existing helpers. This should not cause any functional change. Link: http://lkml.kernel.org/r/1582782965-3274-4-git-send-email-anshuman.khandual@xxxxxxx Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxxxxx> Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/huge_mm.h | 4 +--- include/linux/mm.h | 14 ++++++++++++++ mm/khugepaged.c | 2 +- mm/mremap.c | 2 +- mm/rmap.c | 16 +--------------- 5 files changed, 18 insertions(+), 20 deletions(-) --- a/include/linux/huge_mm.h~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/include/linux/huge_mm.h @@ -87,8 +87,6 @@ extern struct kobj_attribute shmem_enabl #define HPAGE_PUD_SIZE ((1UL) << HPAGE_PUD_SHIFT) #define HPAGE_PUD_MASK (~(HPAGE_PUD_SIZE - 1)) -extern bool is_vma_temporary_stack(struct vm_area_struct *vma); - extern unsigned long transparent_hugepage_flags; /* @@ -100,7 +98,7 @@ static inline bool __transparent_hugepag if (vma->vm_flags & VM_NOHUGEPAGE) return false; - if (is_vma_temporary_stack(vma)) + if (vma_is_temporary_stack(vma)) return false; if (test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)) --- a/include/linux/mm.h~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/include/linux/mm.h @@ -549,6 +549,20 @@ static inline bool vma_is_accessible(str return vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC); } +static inline bool vma_is_temporary_stack(struct vm_area_struct *vma) +{ + int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); + + if (!maybe_stack) + return false; + + if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == + VM_STACK_INCOMPLETE_SETUP) + return true; + + return false; +} + static inline bool vma_is_foreign(struct vm_area_struct *vma) { if (!current->mm) --- a/mm/khugepaged.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/khugepaged.c @@ -421,7 +421,7 @@ static bool hugepage_vma_check(struct vm } if (!vma->anon_vma || vma->vm_ops) return false; - if (is_vma_temporary_stack(vma)) + if (vma_is_temporary_stack(vma)) return false; return !(vm_flags & VM_NO_KHUGEPAGED); } --- a/mm/mremap.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/mremap.c @@ -133,7 +133,7 @@ static void move_ptes(struct vm_area_str * such races: * * - During exec() shift_arg_pages(), we use a specially tagged vma - * which rmap call sites look for using is_vma_temporary_stack(). + * which rmap call sites look for using vma_is_temporary_stack(). * * - During mremap(), new_vma is often known to be placed after vma * in rmap traversal order. This ensures rmap will always observe --- a/mm/rmap.c~mm-vma-make-is_vma_temporary_stack-available-for-general-use +++ a/mm/rmap.c @@ -1686,23 +1686,9 @@ discard: return ret; } -bool is_vma_temporary_stack(struct vm_area_struct *vma) -{ - int maybe_stack = vma->vm_flags & (VM_GROWSDOWN | VM_GROWSUP); - - if (!maybe_stack) - return false; - - if ((vma->vm_flags & VM_STACK_INCOMPLETE_SETUP) == - VM_STACK_INCOMPLETE_SETUP) - return true; - - return false; -} - static bool invalid_migration_vma(struct vm_area_struct *vma, void *arg) { - return is_vma_temporary_stack(vma); + return vma_is_temporary_stack(vma); } static int page_mapcount_is_zero(struct page *page) _ Patches currently in -mm which might be from anshuman.khandual@xxxxxxx are mm-debug-add-tests-validating-architecture-page-table-helpers.patch mm-debug-add-tests-validating-architecture-page-table-helpers-fix-2.patch mm-vma-add-missing-vma-flag-readable-name-for-vm_sync.patch mm-vma-make-vma_is_accessible-available-for-general-use.patch mm-vma-replace-all-remaining-open-encodings-with-is_vm_hugetlb_page.patch mm-vma-replace-all-remaining-open-encodings-with-vma_is_anonymous.patch mm-vma-append-unlikely-while-testing-vma-access-permissions.patch mm-vma-move-vm_no_khugepaged-into-generic-header.patch mm-vma-make-vma_is_foreign-available-for-general-use.patch mm-vma-make-is_vma_temporary_stack-available-for-general-use.patch