On Sat, 4 Apr 2020 at 21:36, Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> wrote: > > On Sat, Apr 04, 2020 at 08:10:42PM +0530, Naresh Kamboju wrote: > > On Fri, 3 Apr 2020 at 19:02, Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> wrote: > > > > > > On Fri, Apr 03, 2020 at 12:56:57AM +0530, Naresh Kamboju wrote: > > > > [ 734.876355] old_addr: 0xbfe00000, new_addr: 0xbfc00000, old_end: 0xc0000000 > > > > > > The ranges are overlapping. We don't expect it. mremap(2) never does this. > > > > > > shift_arg_pages() only moves range downwards. It should be safe. > > > > > > Could you try this: > > > > Applied the patch and tested and still getting kernel warning. > > CONFIG_HIGHMEM64G=y is still enabled. > > > > [ 790.041040] ------------[ cut here ]------------ > > [ 790.045664] WARNING: CPU: 3 PID: 3195 at mm/mremap.c:212 > > move_page_tables+0x7a7/0x840 > > Are you sure the patch is applied? The line number in the warning supposed > to change. Yes. The patch was applied and tested. The reason for line number change is due to linux/mmdebug.h included because an earlier patch "dump_vma(vma);" needed this. diff --git a/mm/mremap.c b/mm/mremap.c index af363063ea23..cf02d4244e83 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -24,6 +24,7 @@ #include <linux/uaccess.h> #include <linux/mm-arch-hooks.h> #include <linux/userfaultfd_k.h> +#include <linux/mmdebug.h> #include <asm/cacheflush.h> #include <asm/tlbflush.h> @@ -208,7 +209,7 @@ static bool move_normal_pmd(struct vm_area_struct *vma, unsigned long old_addr, * The destination pmd shouldn't be established, free_pgtables() * should have release it. */ - if (WARN_ON(!pmd_none(*new_pmd))) + if (WARN_ON(!pmd_none(*new_pmd) && old_addr > new_addr)) return false; /* - Naresh