OSDN Git Service

mm: page_alloc: pass PFN to __free_pages_bootmem
[uclinux-h8/linux.git] / mm / mremap.c
index 034e2d3..a7c93ec 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/mmu_notifier.h>
 #include <linux/sched/sysctl.h>
 #include <linux/uaccess.h>
+#include <linux/mm-arch-hooks.h>
 
 #include <asm/cacheflush.h>
 #include <asm/tlbflush.h>
@@ -286,13 +287,17 @@ static unsigned long move_vma(struct vm_area_struct *vma,
                old_len = new_len;
                old_addr = new_addr;
                new_addr = -ENOMEM;
-       } else if (vma->vm_file && vma->vm_file->f_op->mremap) {
-               err = vma->vm_file->f_op->mremap(vma->vm_file, new_vma);
-               if (err < 0) {
-                       move_page_tables(new_vma, new_addr, vma, old_addr,
-                                        moved_len, true);
-                       return err;
+       } else {
+               if (vma->vm_file && vma->vm_file->f_op->mremap) {
+                       err = vma->vm_file->f_op->mremap(vma->vm_file, new_vma);
+                       if (err < 0) {
+                               move_page_tables(new_vma, new_addr, vma,
+                                                old_addr, moved_len, true);
+                               return err;
+                       }
                }
+               arch_remap(mm, old_addr, old_addr + old_len,
+                          new_addr, new_addr + new_len);
        }
 
        /* Conceal VM_ACCOUNT so old reservation is not undone */