The patch titled Subject: mm/rmap: pass rmap flags to hugepage_add_anon_rmap() has been added to the -mm tree. Its filename is mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap.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: David Hildenbrand <david@xxxxxxxxxx> Subject: mm/rmap: pass rmap flags to hugepage_add_anon_rmap() Let's prepare for passing RMAP_EXCLUSIVE, similarly as we do for page_add_anon_rmap() now. RMAP_COMPOUND is implicit for hugetlb pages and ignored. Link: https://lkml.kernel.org/r/20220329160440.193848-8-david@xxxxxxxxxx Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Cc: Don Dutile <ddutile@xxxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Jan Kara <jack@xxxxxxx> Cc: Jann Horn <jannh@xxxxxxxxxx> Cc: Jason Gunthorpe <jgg@xxxxxxxxxx> Cc: John Hubbard <jhubbard@xxxxxxxxxx> Cc: Khalid Aziz <khalid.aziz@xxxxxxxxxx> Cc: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> Cc: Liang Zhang <zhangliang5@xxxxxxxxxx> Cc: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx> Cc: Mike Rapoport <rppt@xxxxxxxxxxxxx> Cc: Nadav Amit <namit@xxxxxxxxxx> Cc: Oded Gabbay <oded.gabbay@xxxxxxxxx> Cc: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Pedro Demarchi Gomes <pedrodemargomes@xxxxxxxxx> Cc: Peter Xu <peterx@xxxxxxxxxx> Cc: Rik van Riel <riel@xxxxxxxxxxx> Cc: Roman Gushchin <guro@xxxxxx> Cc: Shakeel Butt <shakeelb@xxxxxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: Yang Shi <shy828301@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/rmap.h | 2 +- mm/migrate.c | 3 ++- mm/rmap.c | 9 ++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) --- a/include/linux/rmap.h~mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap +++ a/include/linux/rmap.h @@ -191,7 +191,7 @@ void page_add_file_rmap(struct page *, s void page_remove_rmap(struct page *, struct vm_area_struct *, bool compound); void hugepage_add_anon_rmap(struct page *, struct vm_area_struct *, - unsigned long address); + unsigned long address, rmap_t flags); void hugepage_add_new_anon_rmap(struct page *, struct vm_area_struct *, unsigned long address); --- a/mm/migrate.c~mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap +++ a/mm/migrate.c @@ -232,7 +232,8 @@ static bool remove_migration_pte(struct pte = pte_mkhuge(pte); pte = arch_make_huge_pte(pte, shift, vma->vm_flags); if (folio_test_anon(folio)) - hugepage_add_anon_rmap(new, vma, pvmw.address); + hugepage_add_anon_rmap(new, vma, pvmw.address, + RMAP_NONE); else page_dup_file_rmap(new, true); set_huge_pte_at(vma->vm_mm, pvmw.address, pvmw.pte, pte); --- a/mm/rmap.c~mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap +++ a/mm/rmap.c @@ -2347,9 +2347,11 @@ void rmap_walk_locked(struct folio *foli * The following two functions are for anonymous (private mapped) hugepages. * Unlike common anonymous pages, anonymous hugepages have no accounting code * and no lru code, because we handle hugepages differently from common pages. + * + * RMAP_COMPOUND is ignored. */ -void hugepage_add_anon_rmap(struct page *page, - struct vm_area_struct *vma, unsigned long address) +void hugepage_add_anon_rmap(struct page *page, struct vm_area_struct *vma, + unsigned long address, rmap_t flags) { struct anon_vma *anon_vma = vma->anon_vma; int first; @@ -2359,7 +2361,8 @@ void hugepage_add_anon_rmap(struct page /* address might be in next vma when migration races vma_adjust */ first = atomic_inc_and_test(compound_mapcount_ptr(page)); if (first) - __page_set_anon_rmap(page, vma, address, 0); + __page_set_anon_rmap(page, vma, address, + !!(flags & RMAP_EXCLUSIVE)); } void hugepage_add_new_anon_rmap(struct page *page, _ Patches currently in -mm which might be from david@xxxxxxxxxx are mm-rmap-fix-missing-swap_free-in-try_to_unmap-after-arch_unmap_one-failed.patch mm-hugetlb-take-src_mm-write_protect_seq-in-copy_hugetlb_page_range.patch mm-memory-slightly-simplify-copy_present_pte.patch mm-rmap-split-page_dup_rmap-into-page_dup_file_rmap-and-page_try_dup_anon_rmap.patch mm-rmap-convert-rmap-flags-to-a-proper-distinct-rmap_t-type.patch mm-rmap-remove-do_page_add_anon_rmap.patch mm-rmap-pass-rmap-flags-to-hugepage_add_anon_rmap.patch mm-rmap-drop-compound-parameter-from-page_add_new_anon_rmap.patch mm-rmap-use-page_move_anon_rmap-when-reusing-a-mapped-pageanon-page-exclusively.patch mm-huge_memory-remove-outdated-vm_warn_on_once_page-from-unmap_page.patch mm-page-flags-reuse-pg_mappedtodisk-as-pg_anon_exclusive-for-pageanon-pages.patch mm-remember-exclusively-mapped-anonymous-pages-with-pg_anon_exclusive.patch mm-gup-disallow-follow_pagefoll_pin.patch mm-support-gup-triggered-unsharing-of-anonymous-pages.patch mm-gup-trigger-fault_flag_unshare-when-r-o-pinning-a-possibly-shared-anonymous-page.patch mm-gup-sanity-check-with-config_debug_vm-that-anonymous-pages-are-exclusive-when-unpinning.patch mm-swap-remember-pg_anon_exclusive-via-a-swp-pte-bit.patch mm-debug_vm_pgtable-add-tests-for-__have_arch_pte_swp_exclusive.patch x86-pgtable-support-__have_arch_pte_swp_exclusive.patch arm64-pgtable-support-__have_arch_pte_swp_exclusive.patch s390-pgtable-cleanup-description-of-swp-pte-layout.patch s390-pgtable-support-__have_arch_pte_swp_exclusive.patch powerpc-pgtable-remove-_page_bit_swap_type-for-book3s.patch powerpc-pgtable-support-__have_arch_pte_swp_exclusive-for-book3s.patch