]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mmap: Remove __do_munmap() in favour of do_mas_munmap()
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 24 Nov 2020 21:27:58 +0000 (16:27 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 5 Jan 2021 17:33:27 +0000 (12:33 -0500)
Export new interface and use it in all places necessary including mremap.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
include/linux/mm.h
mm/mmap.c
mm/mremap.c

index 996353a0575004b429c1fc330dbfac41a8c24898..f039fefa3acd2444f35899db375ecc0e1e8cc264 100644 (file)
@@ -2573,8 +2573,8 @@ extern unsigned long mmap_region(struct file *file, unsigned long addr,
 extern unsigned long do_mmap(struct file *file, unsigned long addr,
        unsigned long len, unsigned long prot, unsigned long flags,
        unsigned long pgoff, unsigned long *populate, struct list_head *uf);
-extern int __do_munmap(struct mm_struct *, unsigned long, size_t,
-                      struct list_head *uf, bool downgrade);
+extern int do_mas_munmap(struct ma_state *mas,struct mm_struct *mm,
+        unsigned long start, size_t len, struct list_head *uf, bool downgrade);
 extern int do_munmap(struct mm_struct *, unsigned long, size_t,
                     struct list_head *uf);
 extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior);
index 5ede23b56f0abf661862f782ba72f567393f2cee..97689c69e3fb58495e77ec7dd5055dede4b8ac97 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2428,9 +2428,9 @@ static inline int unlock_range(struct vm_area_struct *start,
  * work.  This now handles partial unmappings.
  * Jeremy Fitzhardinge <jeremy@goop.org>
  */
-static int do_mas_munmap(struct ma_state *mas, struct mm_struct *mm,
-                        unsigned long start, size_t len, struct list_head *uf,
-                        bool downgrade)
+int do_mas_munmap(struct ma_state *mas, struct mm_struct *mm,
+                 unsigned long start, size_t len, struct list_head *uf,
+                 bool downgrade)
 {
        unsigned long end;
        struct vm_area_struct *vma, *prev, *last;
@@ -2556,17 +2556,11 @@ static int do_mas_munmap(struct ma_state *mas, struct mm_struct *mm,
        return downgrade ? 1 : 0;
 }
 
-int __do_munmap(struct mm_struct *mm, unsigned long start, size_t len,
-               struct list_head *uf, bool downgrade)
-{
-       MA_STATE(mas, &mm->mm_mt, start, start);
-       return do_mas_munmap(&mas, mm, start, len, uf, downgrade);
-}
-
 int do_munmap(struct mm_struct *mm, unsigned long start, size_t len,
              struct list_head *uf)
 {
-       return __do_munmap(mm, start, len, uf, false);
+       MA_STATE(mas, &mm->mm_mt, start, start);
+       return do_mas_munmap(&mas, mm, start, len, uf, false);
 }
 
 unsigned long mmap_region(struct file *file, unsigned long addr,
@@ -2815,11 +2809,12 @@ static int __vm_munmap(unsigned long start, size_t len, bool downgrade)
        int ret;
        struct mm_struct *mm = current->mm;
        LIST_HEAD(uf);
+       MA_STATE(mas, &mm->mm_mt, start, start);
 
        if (mmap_write_lock_killable(mm))
                return -EINTR;
 
-       ret = __do_munmap(mm, start, len, &uf, downgrade);
+       ret = do_mas_munmap(&mas, mm, start, len, &uf, downgrade);
        /*
         * Returning 1 indicates mmap_lock is downgraded.
         * But 1 is not legal return value of vm_munmap() and munmap(), reset
@@ -2971,7 +2966,7 @@ static int do_brk_munmap(struct ma_state *mas, struct vm_area_struct *vma,
        arch_unmap(mm, newbrk, oldbrk);
 
        if (vma->vm_start >= newbrk) { // remove entire mapping(s)
-               ret = __do_munmap(mm, newbrk, oldbrk-newbrk, uf, true);
+               ret = do_mas_munmap(mas, mm, newbrk, oldbrk-newbrk, uf, true);
                goto munmap_full_vma;
        }
 
index 138abbae4f758763c5be19578b2909d5d003db28..a7526a8c1fe5a511c0f58ded07bd5ace0567ec52 100644 (file)
@@ -723,14 +723,15 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
        /*
         * Always allow a shrinking remap: that just unmaps
         * the unnecessary pages..
-        * __do_munmap does all the needed commit accounting, and
+        * do_mas_munmap does all the needed commit accounting, and
         * downgrades mmap_lock to read if so directed.
         */
        if (old_len >= new_len) {
                int retval;
+               MA_STATE(mas, &mm->mm_mt, addr + new_len, addr + new_len);
 
-               retval = __do_munmap(mm, addr+new_len, old_len - new_len,
-                                 &uf_unmap, true);
+               retval = do_mas_munmap(&mas, mm, addr + new_len,
+                                      old_len - new_len, &uf_unmap, true);
                if (retval < 0 && old_len != new_len) {
                        ret = retval;
                        goto out;