On Thu, Apr 02, 2020 at 04:49:02PM +0530, Naresh Kamboju wrote: > While running LTP mm thp01 test case on i386 kernel running on x86_64 device > the following kernel warning was noticed multiple times. > > This issue is not new, > we have noticed on stable-rc 5.4, stable-rc 5.5 and stable-rc 5.6 branches. > FYI, CONFIG_HAVE_MOVE_PMD=y is set on > and total memory 2.2G as per free output. > > steps to reproduce: > -------------------- > boot i386 kernel on x86_64 device, > cd /opt/ltp > ./runltp -f mm > thp01.c:98: PASS: system didn't crash. > thp01.c:98: PASS: system didn't crash. > thp01.c:98: PASS: system didn't crash. > > [ 207.317499] ------------[ cut here ]------------ > [ 207.322153] WARNING: CPU: 0 PID: 18963 at mm/mremap.c:211 > move_page_tables+0x5b0/0x5d0 > Kernel config: > https://builds.tuxbuild.com/RJ9BGpsgfPfj3Sfje8oLSw/kernel.config Interesting. I suspect it's related to 2-level page tables in this configuration. But I cannot immediately see how. Could you test if enabling HIGHMEM64 fixes the issue? Below is patch that prints some additional info: diff --git a/mm/mremap.c b/mm/mremap.c index d28f08a36b96..065d5ec3614a 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -208,8 +208,14 @@ 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))) { + dump_vma(vma); + printk("old_addr: %#lx, new_addr: %#lx, old_end: %#lx\n", + old_addr, new_addr, old_end); + printk("old_pmd: %#lx", pmd_val(*old_pmd)); + printk("new_pmd: %#lx", pmd_val(*new_pmd)); return false; + } /* * We don't have to worry about the ordering of src and dst -- Kirill A. Shutemov