#include <asm/mm-arch-hooks.h>
 
+#ifndef arch_remap
+static inline void arch_remap(struct mm_struct *mm,
+                             unsigned long old_start, unsigned long old_end,
+                             unsigned long new_start, unsigned long new_end)
+{
+}
+#define arch_remap arch_remap
+#endif
+
 #endif /* _LINUX_MM_ARCH_HOOKS_H */
 
 #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>
                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 */