mm/mmu_notifier: remove unused mmu_notifier_range_update_to_read_only export
authorAlistair Popple <apopple@nvidia.com>
Tue, 10 Jan 2023 02:57:22 +0000 (13:57 +1100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 3 Feb 2023 06:32:54 +0000 (22:32 -0800)
mmu_notifier_range_update_to_read_only() was originally introduced in
commit c6d23413f81b ("mm/mmu_notifier:
mmu_notifier_range_update_to_read_only() helper") as an optimisation for
device drivers that know a range has only been mapped read-only.  However
there are no users of this feature so remove it.  As it is the only user
of the struct mmu_notifier_range.vma field remove that also.

Link: https://lkml.kernel.org/r/20230110025722.600912-1-apopple@nvidia.com
Signed-off-by: Alistair Popple <apopple@nvidia.com>
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Cc: Jerome Glisse <jglisse@redhat.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Ralph Campbell <rcampbell@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
16 files changed:
fs/proc/task_mmu.c
include/linux/mmu_notifier.h
kernel/events/uprobes.c
mm/huge_memory.c
mm/hugetlb.c
mm/khugepaged.c
mm/ksm.c
mm/madvise.c
mm/mapping_dirty_helpers.c
mm/memory.c
mm/migrate_device.c
mm/mmu_notifier.c
mm/mprotect.c
mm/mremap.c
mm/oom_kill.c
mm/rmap.c

index af1c49ae11b1656168d0c75d696d5d568911a250..a44339a77a75e126c1851690f57d8321841772db 100644 (file)
@@ -1306,7 +1306,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
 
                        inc_tlb_flush_pending(mm);
                        mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY,
-                                               0, NULL, mm, 0, -1UL);
+                                               0, mm, 0, -1UL);
                        mmu_notifier_invalidate_range_start(&range);
                }
                walk_page_range(mm, 0, -1, &clear_refs_walk_ops, &cp);
index d6c06e140277142227429a462f8b7acdb55dee15..64a3e051c3c43897dca74ea44e45cc32c183e06f 100644 (file)
@@ -269,7 +269,6 @@ extern struct lockdep_map __mmu_notifier_invalidate_range_start_map;
 #endif
 
 struct mmu_notifier_range {
-       struct vm_area_struct *vma;
        struct mm_struct *mm;
        unsigned long start;
        unsigned long end;
@@ -514,12 +513,10 @@ static inline void mmu_notifier_subscriptions_destroy(struct mm_struct *mm)
 static inline void mmu_notifier_range_init(struct mmu_notifier_range *range,
                                           enum mmu_notifier_event event,
                                           unsigned flags,
-                                          struct vm_area_struct *vma,
                                           struct mm_struct *mm,
                                           unsigned long start,
                                           unsigned long end)
 {
-       range->vma = vma;
        range->event = event;
        range->mm = mm;
        range->start = start;
@@ -530,10 +527,10 @@ static inline void mmu_notifier_range_init(struct mmu_notifier_range *range,
 static inline void mmu_notifier_range_init_owner(
                        struct mmu_notifier_range *range,
                        enum mmu_notifier_event event, unsigned int flags,
-                       struct vm_area_struct *vma, struct mm_struct *mm,
-                       unsigned long start, unsigned long end, void *owner)
+                       struct mm_struct *mm, unsigned long start,
+                       unsigned long end, void *owner)
 {
-       mmu_notifier_range_init(range, event, flags, vma, mm, start, end);
+       mmu_notifier_range_init(range, event, flags, mm, start, end);
        range->owner = owner;
 }
 
@@ -659,9 +656,9 @@ static inline void _mmu_notifier_range_init(struct mmu_notifier_range *range,
        range->end = end;
 }
 
-#define mmu_notifier_range_init(range,event,flags,vma,mm,start,end)  \
+#define mmu_notifier_range_init(range,event,flags,mm,start,end)  \
        _mmu_notifier_range_init(range, start, end)
-#define mmu_notifier_range_init_owner(range, event, flags, vma, mm, start, \
+#define mmu_notifier_range_init_owner(range, event, flags, mm, start, \
                                        end, owner) \
        _mmu_notifier_range_init(range, start, end)
 
index d9e357b7e17c91cfc461bb06b0c3f89a7b649135..29f36d2ae1290896b04f7aedb8e39b08026c4ccb 100644 (file)
@@ -161,7 +161,7 @@ static int __replace_page(struct vm_area_struct *vma, unsigned long addr,
        int err;
        struct mmu_notifier_range range;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, addr,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, addr,
                                addr + PAGE_SIZE);
 
        if (new_page) {
index 7e68a36b4f7d557eeb6417dd8d956d78d93881a1..c13b1f67d14e88b0db0ad3d18d6871da25efe958 100644 (file)
@@ -2020,7 +2020,7 @@ void __split_huge_pud(struct vm_area_struct *vma, pud_t *pud,
        spinlock_t *ptl;
        struct mmu_notifier_range range;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                address & HPAGE_PUD_MASK,
                                (address & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE);
        mmu_notifier_invalidate_range_start(&range);
@@ -2282,7 +2282,7 @@ void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
        spinlock_t *ptl;
        struct mmu_notifier_range range;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                address & HPAGE_PMD_MASK,
                                (address & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE);
        mmu_notifier_invalidate_range_start(&range);
index 6fe65f14d33b0bd82a1a1a127c585a720f4a270a..273a6522aa4c940e01375a8b8d203da0bc47255e 100644 (file)
@@ -4966,7 +4966,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
        int ret = 0;
 
        if (cow) {
-               mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, src_vma, src,
+               mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, src,
                                        src_vma->vm_start,
                                        src_vma->vm_end);
                mmu_notifier_invalidate_range_start(&range);
@@ -5177,7 +5177,7 @@ int move_hugetlb_page_tables(struct vm_area_struct *vma,
        struct mmu_notifier_range range;
        bool shared_pmd = false;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, old_addr,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, old_addr,
                                old_end);
        adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end);
        /*
@@ -5391,7 +5391,7 @@ void unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
        struct mmu_notifier_range range;
        struct mmu_gather tlb;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                start, end);
        adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end);
        mmu_notifier_invalidate_range_start(&range);
@@ -5597,7 +5597,7 @@ retry_avoidcopy:
                            pages_per_huge_page(h));
        __SetPageUptodate(new_page);
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, haddr,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, haddr,
                                haddr + huge_page_size(h));
        mmu_notifier_invalidate_range_start(&range);
 
@@ -6637,7 +6637,7 @@ long hugetlb_change_protection(struct vm_area_struct *vma,
         * range if PMD sharing is possible.
         */
        mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_VMA,
-                               0, vma, mm, start, end);
+                               0, mm, start, end);
        adjust_range_if_pmd_sharing_possible(vma, &range.start, &range.end);
 
        BUG_ON(address >= end);
@@ -7368,7 +7368,7 @@ static void hugetlb_unshare_pmds(struct vm_area_struct *vma,
         * No need to call adjust_range_if_pmd_sharing_possible(), because
         * we have already done the PUD_SIZE alignment.
         */
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm,
                                start, end);
        mmu_notifier_invalidate_range_start(&range);
        hugetlb_vma_lock_write(vma);
index 90acfea40c13c9e13d48b0868bb308251bce4cf4..57164c15e076195324a97c700b9eb1e6e94d10a6 100644 (file)
@@ -1040,8 +1040,8 @@ static int collapse_huge_page(struct mm_struct *mm, unsigned long address,
 
        anon_vma_lock_write(vma->anon_vma);
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm,
-                               address, address + HPAGE_PMD_SIZE);
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, address,
+                               address + HPAGE_PMD_SIZE);
        mmu_notifier_invalidate_range_start(&range);
 
        pte = pte_offset_map(pmd, address);
@@ -1412,7 +1412,7 @@ static void collapse_and_free_pmd(struct mm_struct *mm, struct vm_area_struct *v
        if (vma->anon_vma)
                lockdep_assert_held_write(&vma->anon_vma->root->rwsem);
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, NULL, mm, addr,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, addr,
                                addr + HPAGE_PMD_SIZE);
        mmu_notifier_invalidate_range_start(&range);
        pmd = pmdp_collapse_flush(vma, addr, pmdp);
index dd02780c387f02b3176d088fdcc1bb9d6db487e8..cea0c447822085a8ddd6abb17015113591c8b2ce 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1057,8 +1057,7 @@ static int write_protect_page(struct vm_area_struct *vma, struct page *page,
 
        BUG_ON(PageTransCompound(page));
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm,
-                               pvmw.address,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, pvmw.address,
                                pvmw.address + PAGE_SIZE);
        mmu_notifier_invalidate_range_start(&range);
 
@@ -1164,7 +1163,7 @@ static int replace_page(struct vm_area_struct *vma, struct page *page,
        if (!pmd_present(pmde) || pmd_trans_huge(pmde))
                goto out;
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm, addr,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, addr,
                                addr + PAGE_SIZE);
        mmu_notifier_invalidate_range_start(&range);
 
index e407d335e61455b8cf4985ea7e3b110b7329206f..5296e78dccda0c8c5c0ff7403cbe3108af10a2ab 100644 (file)
@@ -765,7 +765,7 @@ static int madvise_free_single_vma(struct vm_area_struct *vma,
        range.end = min(vma->vm_end, end_addr);
        if (range.end <= vma->vm_start)
                return -EINVAL;
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm,
                                range.start, range.end);
 
        lru_add_drain();
index 175e424b9ab1b44e10c19fd0c64a948c8acaa608..e1eb33f49059239a76c5eee9084e7daaa867c1ea 100644 (file)
@@ -191,7 +191,7 @@ static int wp_clean_pre_vma(unsigned long start, unsigned long end,
        wpwalk->tlbflush_end = start;
 
        mmu_notifier_range_init(&wpwalk->range, MMU_NOTIFY_PROTECTION_PAGE, 0,
-                               walk->vma, walk->mm, start, end);
+                               walk->mm, start, end);
        mmu_notifier_invalidate_range_start(&wpwalk->range);
        flush_cache_range(walk->vma, start, end);
 
index 90f8f72777c7369ce60ab86aaa5994fd54c4677b..c6bacd58d032a1028eef949ae32a826c4930a371 100644 (file)
@@ -1266,7 +1266,7 @@ copy_page_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma)
 
        if (is_cow) {
                mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_PAGE,
-                                       0, src_vma, src_mm, addr, end);
+                                       0, src_mm, addr, end);
                mmu_notifier_invalidate_range_start(&range);
                /*
                 * Disabling preemption is not needed for the write side, as
@@ -1683,7 +1683,7 @@ void unmap_vmas(struct mmu_gather *tlb, struct maple_tree *mt,
        };
        MA_STATE(mas, mt, vma->vm_end, vma->vm_end);
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0, vma->vm_mm,
                                start_addr, end_addr);
        mmu_notifier_invalidate_range_start(&range);
        do {
@@ -1709,7 +1709,7 @@ void zap_page_range_single(struct vm_area_struct *vma, unsigned long address,
        struct mmu_gather tlb;
 
        lru_add_drain();
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                address, end);
        if (is_vm_hugetlb_page(vma))
                adjust_range_if_pmd_sharing_possible(vma, &range.start,
@@ -3091,7 +3091,7 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf)
 
        __SetPageUptodate(new_page);
 
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm,
                                vmf->address & PAGE_MASK,
                                (vmf->address & PAGE_MASK) + PAGE_SIZE);
        mmu_notifier_invalidate_range_start(&range);
@@ -3561,7 +3561,7 @@ static vm_fault_t remove_device_exclusive_entry(struct vm_fault *vmf)
 
        if (!folio_lock_or_retry(folio, vma->vm_mm, vmf->flags))
                return VM_FAULT_RETRY;
-       mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0, vma,
+       mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0,
                                vma->vm_mm, vmf->address & PAGE_MASK,
                                (vmf->address & PAGE_MASK) + PAGE_SIZE, NULL);
        mmu_notifier_invalidate_range_start(&range);
index 721b2365dbca966e6f56a916a374596b710459c1..6c3740318a98cede737f3e821363309b33a24dc1 100644 (file)
@@ -306,7 +306,7 @@ static void migrate_vma_collect(struct migrate_vma *migrate)
         * private page mappings that won't be migrated.
         */
        mmu_notifier_range_init_owner(&range, MMU_NOTIFY_MIGRATE, 0,
-               migrate->vma, migrate->vma->vm_mm, migrate->start, migrate->end,
+               migrate->vma->vm_mm, migrate->start, migrate->end,
                migrate->pgmap_owner);
        mmu_notifier_invalidate_range_start(&range);
 
@@ -733,7 +733,7 @@ static void __migrate_device_pages(unsigned long *src_pfns,
                                notified = true;
 
                                mmu_notifier_range_init_owner(&range,
-                                       MMU_NOTIFY_MIGRATE, 0, migrate->vma,
+                                       MMU_NOTIFY_MIGRATE, 0,
                                        migrate->vma->vm_mm, addr, migrate->end,
                                        migrate->pgmap_owner);
                                mmu_notifier_invalidate_range_start(&range);
index f45ff1b7626a62834073857f9529d5badd51a934..50c0dde1354f456366786cfa35d555df5398ad96 100644 (file)
@@ -1120,13 +1120,3 @@ void mmu_notifier_synchronize(void)
        synchronize_srcu(&srcu);
 }
 EXPORT_SYMBOL_GPL(mmu_notifier_synchronize);
-
-bool
-mmu_notifier_range_update_to_read_only(const struct mmu_notifier_range *range)
-{
-       if (!range->vma || range->event != MMU_NOTIFY_PROTECTION_VMA)
-               return false;
-       /* Return true if the vma still have the read flag set. */
-       return range->vma->vm_flags & VM_READ;
-}
-EXPORT_SYMBOL_GPL(mmu_notifier_range_update_to_read_only);
index 92fc6f3fa5125d2f046e93d7ea0cc1b289bdb14f..6ecdf0671b810c49286cc107c7e19e117ba5d83c 100644 (file)
@@ -398,7 +398,7 @@ static inline long change_pmd_range(struct mmu_gather *tlb,
                if (!range.start) {
                        mmu_notifier_range_init(&range,
                                MMU_NOTIFY_PROTECTION_VMA, 0,
-                               vma, vma->vm_mm, addr, end);
+                               vma->vm_mm, addr, end);
                        mmu_notifier_invalidate_range_start(&range);
                }
 
index 930f65c315c02469bd72f1608e69a4f4131256f1..05f90f47e1494ec2f1c07786e6f98772ba728abe 100644 (file)
@@ -498,7 +498,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
                                                new_addr, len);
 
        flush_cache_range(vma, old_addr, old_end);
-       mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0, vma->vm_mm,
                                old_addr, old_end);
        mmu_notifier_invalidate_range_start(&range);
 
index 1276e49b31b0a0dfd5ca625486ee50f4fc6131a1..044e1eed720eedab7374fcf2f37de34b80ea6980 100644 (file)
@@ -542,7 +542,7 @@ static bool __oom_reap_task_mm(struct mm_struct *mm)
                        struct mmu_gather tlb;
 
                        mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0,
-                                               vma, mm, vma->vm_start,
+                                               mm, vma->vm_start,
                                                vma->vm_end);
                        tlb_gather_mmu(&tlb, mm);
                        if (mmu_notifier_invalidate_range_start_nonblock(&range)) {
index ab74e0547a528eabd7813a64af9f0ca34dec49cf..6ccd42bbae93fadfa6f7a1bd1c476511033d3a18 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -944,9 +944,8 @@ static int page_vma_mkclean_one(struct page_vma_mapped_walk *pvmw)
         * We have to assume the worse case ie pmd for invalidation. Note that
         * the folio can not be freed from this function.
         */
-       mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_PAGE,
-                               0, vma, vma->vm_mm, address,
-                               vma_address_end(pvmw));
+       mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_PAGE, 0,
+                               vma->vm_mm, address, vma_address_end(pvmw));
        mmu_notifier_invalidate_range_start(&range);
 
        while (page_vma_mapped_walk(pvmw)) {
@@ -1475,7 +1474,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,
         * try_to_unmap() must hold a reference on the folio.
         */
        range.end = vma_address_end(&pvmw);
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                address, range.end);
        if (folio_test_hugetlb(folio)) {
                /*
@@ -1850,7 +1849,7 @@ static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,
         * try_to_unmap() must hold a reference on the page.
         */
        range.end = vma_address_end(&pvmw);
-       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
+       mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
                                address, range.end);
        if (folio_test_hugetlb(folio)) {
                /*
@@ -2180,7 +2179,7 @@ static bool page_make_device_exclusive_one(struct folio *folio,
        swp_entry_t entry;
        pte_t swp_pte;
 
-       mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0, vma,
+       mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0,
                                      vma->vm_mm, address, min(vma->vm_end,
                                      address + folio_size(folio)),
                                      args->owner);