]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
tlb: mmu_gather: Remove start/end arguments from tlb_gather_mmu()
authorWill Deacon <will@kernel.org>
Wed, 27 Jan 2021 23:53:45 +0000 (23:53 +0000)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 29 Jan 2021 19:02:29 +0000 (20:02 +0100)
The 'start' and 'end' arguments to tlb_gather_mmu() are no longer
needed now that there is a separate function for 'fullmm' flushing.

Remove the unused arguments and update all callers.

Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Yu Zhao <yuzhao@google.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/CAHk-=wjQWa14_4UpfDf=fiineNP+RH74kZeDMo_f1D35xNzq9w@mail.gmail.com
arch/ia64/include/asm/tlb.h
arch/x86/kernel/ldt.c
fs/exec.c
include/linux/mm_types.h
mm/hugetlb.c
mm/madvise.c
mm/memory.c
mm/mmap.c
mm/mmu_gather.c
mm/oom_kill.c

index 7059eb2e867a342e6e1fd84674e3b516bd47f652..a15fe0809aaed4d190b0e29f0a2fa62f3b070341 100644 (file)
@@ -23,7 +23,7 @@
  * unmapping a portion of the virtual address space, these hooks are called according to
  * the following template:
  *
- *     tlb <- tlb_gather_mmu(mm, start, end);          // start unmap for address space MM
+ *     tlb <- tlb_gather_mmu(mm);                      // start unmap for address space MM
  *     {
  *       for each vma that needs a shootdown do {
  *         tlb_start_vma(tlb, vma);
index 0d4e1253c9c9024de21485381c9c313198a28b23..7ad9834e0d95654793efb22c6ef7cc0976841c64 100644 (file)
@@ -398,7 +398,7 @@ static void free_ldt_pgtables(struct mm_struct *mm)
        if (!boot_cpu_has(X86_FEATURE_PTI))
                return;
 
-       tlb_gather_mmu(&tlb, mm, start, end);
+       tlb_gather_mmu(&tlb, mm);
        free_pgd_range(&tlb, start, end, start, end);
        tlb_finish_mmu(&tlb);
 #endif
index 69d89a0c35e92d318ab406ed9f8e46c3244077ea..5a853f03c23322533102716d826076a382e1deae 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -708,7 +708,7 @@ static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)
                return -ENOMEM;
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, old_start, old_end);
+       tlb_gather_mmu(&tlb, mm);
        if (new_end > old_start) {
                /*
                 * when the old and new regions overlap clear from new_end.
index e49868bc12a75beda6e884fc4ef282934141f63d..0974ad501a47ce5d5a8c6913287a1c31c4e44222 100644 (file)
@@ -588,8 +588,7 @@ static inline cpumask_t *mm_cpumask(struct mm_struct *mm)
 }
 
 struct mmu_gather;
-extern void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
-                               unsigned long start, unsigned long end);
+extern void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm);
 extern void tlb_gather_mmu_fullmm(struct mmu_gather *tlb, struct mm_struct *mm);
 extern void tlb_finish_mmu(struct mmu_gather *tlb);
 
index 33db4fa62c7b528ddd9610ced89cca1890e9c82a..89635f40723230952cbad148eb21bf4c553a4208 100644 (file)
@@ -3967,23 +3967,9 @@ void __unmap_hugepage_range_final(struct mmu_gather *tlb,
 void unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start,
                          unsigned long end, struct page *ref_page)
 {
-       struct mm_struct *mm;
        struct mmu_gather tlb;
-       unsigned long tlb_start = start;
-       unsigned long tlb_end = end;
 
-       /*
-        * If shared PMDs were possibly used within this vma range, adjust
-        * start/end for worst case tlb flushing.
-        * Note that we can not be sure if PMDs are shared until we try to
-        * unmap pages.  However, we want to make sure TLB flushing covers
-        * the largest possible range.
-        */
-       adjust_range_if_pmd_sharing_possible(vma, &tlb_start, &tlb_end);
-
-       mm = vma->vm_mm;
-
-       tlb_gather_mmu(&tlb, mm, tlb_start, tlb_end);
+       tlb_gather_mmu(&tlb, vma->vm_mm);
        __unmap_hugepage_range(&tlb, vma, start, end, ref_page);
        tlb_finish_mmu(&tlb);
 }
index 1b68520ea3f4d40f1c27e91515d2000f222d8990..0938fd3ad2281a191cd41db3ec9fe951a4a1b5e3 100644 (file)
@@ -506,7 +506,7 @@ static long madvise_cold(struct vm_area_struct *vma,
                return -EINVAL;
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, start_addr, end_addr);
+       tlb_gather_mmu(&tlb, mm);
        madvise_cold_page_range(&tlb, vma, start_addr, end_addr);
        tlb_finish_mmu(&tlb);
 
@@ -558,7 +558,7 @@ static long madvise_pageout(struct vm_area_struct *vma,
                return 0;
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, start_addr, end_addr);
+       tlb_gather_mmu(&tlb, mm);
        madvise_pageout_page_range(&tlb, vma, start_addr, end_addr);
        tlb_finish_mmu(&tlb);
 
@@ -723,7 +723,7 @@ static int madvise_free_single_vma(struct vm_area_struct *vma,
                                range.start, range.end);
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, range.start, range.end);
+       tlb_gather_mmu(&tlb, mm);
        update_hiwater_rss(mm);
 
        mmu_notifier_invalidate_range_start(&range);
index 7bd3f122bd10fab8a759fb32cb11c0087cf4b372..9e8576a83147441e28ef0762a984900e9a538f0a 100644 (file)
@@ -1534,7 +1534,7 @@ void zap_page_range(struct vm_area_struct *vma, unsigned long start,
        lru_add_drain();
        mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
                                start, start + size);
-       tlb_gather_mmu(&tlb, vma->vm_mm, start, range.end);
+       tlb_gather_mmu(&tlb, vma->vm_mm);
        update_hiwater_rss(vma->vm_mm);
        mmu_notifier_invalidate_range_start(&range);
        for ( ; vma && vma->vm_start < range.end; vma = vma->vm_next)
@@ -1561,7 +1561,7 @@ static void zap_page_range_single(struct vm_area_struct *vma, unsigned long addr
        lru_add_drain();
        mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, vma->vm_mm,
                                address, address + size);
-       tlb_gather_mmu(&tlb, vma->vm_mm, address, range.end);
+       tlb_gather_mmu(&tlb, vma->vm_mm);
        update_hiwater_rss(vma->vm_mm);
        mmu_notifier_invalidate_range_start(&range);
        unmap_single_vma(&tlb, vma, address, range.end, details);
index 4eac7c63edbe7550e21558db04cbc2cfdc954b50..90673febce6aafe07c8af6aa4860ebe460167d57 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2671,7 +2671,7 @@ static void unmap_region(struct mm_struct *mm,
        struct mmu_gather tlb;
 
        lru_add_drain();
-       tlb_gather_mmu(&tlb, mm, start, end);
+       tlb_gather_mmu(&tlb, mm);
        update_hiwater_rss(mm);
        unmap_vmas(&tlb, vma, start, end);
        free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
index 5f5e45d9eb50d78d96d1915e4f0b4e7126f2d256..0dc7149b0c6153776320a7e9a0e7357ca18bfa95 100644 (file)
@@ -253,21 +253,17 @@ void tlb_flush_mmu(struct mmu_gather *tlb)
  * tlb_gather_mmu - initialize an mmu_gather structure for page-table tear-down
  * @tlb: the mmu_gather structure to initialize
  * @mm: the mm_struct of the target address space
- * @start: start of the region that will be removed from the page-table
- * @end: end of the region that will be removed from the page-table
+ * @fullmm: @mm is without users and we're going to destroy the full address
+ *         space (exit/execve)
  *
  * Called to initialize an (on-stack) mmu_gather structure for page-table
- * tear-down from @mm. The @start and @end are set to 0 and -1
- * respectively when @mm is without users and we're going to destroy
- * the full address space (exit/execve).
+ * tear-down from @mm.
  */
 static void __tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
-                            unsigned long start, unsigned long end)
+                            bool fullmm)
 {
        tlb->mm = mm;
-
-       /* Is it from 0 to ~0? */
-       tlb->fullmm     = !(start | (end+1));
+       tlb->fullmm = fullmm;
 
 #ifndef CONFIG_MMU_GATHER_NO_GATHER
        tlb->need_flush_all = 0;
@@ -287,16 +283,14 @@ static void __tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
        inc_tlb_flush_pending(tlb->mm);
 }
 
-void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm,
-                   unsigned long start, unsigned long end)
+void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm)
 {
-       WARN_ON(!(start | (end + 1))); /* Use _fullmm() instead */
-       __tlb_gather_mmu(tlb, mm, start, end);
+       __tlb_gather_mmu(tlb, mm, false);
 }
 
 void tlb_gather_mmu_fullmm(struct mmu_gather *tlb, struct mm_struct *mm)
 {
-       __tlb_gather_mmu(tlb, mm, 0, -1);
+       __tlb_gather_mmu(tlb, mm, true);
 }
 
 /**
index 757e557211fb7bcbf88c1d6b8129a6733f65af02..c9a33ffe38b7cab2eeaa723d71d72217535666ab 100644 (file)
@@ -546,7 +546,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm)
                        mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0,
                                                vma, mm, vma->vm_start,
                                                vma->vm_end);
-                       tlb_gather_mmu(&tlb, mm, range.start, range.end);
+                       tlb_gather_mmu(&tlb, mm);
                        if (mmu_notifier_invalidate_range_start_nonblock(&range)) {
                                tlb_finish_mmu(&tlb);
                                ret = false;