All of lore.kernel.org
 help / color / mirror / Atom feed
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Wei Yang <richardw.yang@linux.intel.com>
Cc: Dmitry Osipenko <digetx@gmail.com>,
	akpm@linux-foundation.org, dan.j.williams@intel.com,
	aneesh.kumar@linux.ibm.com, kirill@shutemov.name,
	yang.shi@linux.alibaba.com, thellstrom@vmware.com,
	Thierry Reding <thierry.reding@gmail.com>,
	Jon Hunter <jonathanh@nvidia.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 3/5] mm/mremap: use pmd_addr_end to calculate next in move_page_tables()
Date: Wed, 29 Jan 2020 23:24:41 +0000	[thread overview]
Message-ID: <20200129232441.GI25745@shell.armlinux.org.uk> (raw)
In-Reply-To: <20200129215745.GA20736@richard>

On Thu, Jan 30, 2020 at 05:57:45AM +0800, Wei Yang wrote:
> On Wed, Jan 29, 2020 at 09:47:38AM +0000, Russell King - ARM Linux admin wrote:
> >On Sun, Jan 26, 2020 at 05:47:57PM +0300, Dmitry Osipenko wrote:
> >> 18.01.2020 02:22, Wei Yang пишет:
> >> > Use the general helper instead of do it by hand.
> >> > 
> >> > Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
> >> > ---
> >> >  mm/mremap.c | 7 ++-----
> >> >  1 file changed, 2 insertions(+), 5 deletions(-)
> >> > 
> >> > diff --git a/mm/mremap.c b/mm/mremap.c
> >> > index c2af8ba4ba43..a258914f3ee1 100644
> >> > --- a/mm/mremap.c
> >> > +++ b/mm/mremap.c
> >> > @@ -253,11 +253,8 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
> >> >  
> >> >  	for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
> >> >  		cond_resched();
> >> > -		next = (old_addr + PMD_SIZE) & PMD_MASK;
> >> > -		/* even if next overflowed, extent below will be ok */
> >> > +		next = pmd_addr_end(old_addr, old_end);
> >> >  		extent = next - old_addr;
> >> > -		if (extent > old_end - old_addr)
> >> > -			extent = old_end - old_addr;
> >> >  		old_pmd = get_old_pmd(vma->vm_mm, old_addr);
> >> >  		if (!old_pmd)
> >> >  			continue;
> >> > @@ -301,7 +298,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
> >> >  
> >> >  		if (pte_alloc(new_vma->vm_mm, new_pmd))
> >> >  			break;
> >> > -		next = (new_addr + PMD_SIZE) & PMD_MASK;
> >> > +		next = pmd_addr_end(new_addr, new_addr + len);
> >> >  		if (extent > next - new_addr)
> >> >  			extent = next - new_addr;
> >> >  		move_ptes(vma, old_pmd, old_addr, old_addr + extent, new_vma,
> >> > 
> >> 
> >> Hello Wei,
> >> 
> >> Starting with next-20200122, I'm seeing the following in KMSG on NVIDIA
> >> Tegra (ARM32):
> >> 
> >>   BUG: Bad rss-counter state mm:(ptrval) type:MM_ANONPAGES val:190
> >> 
> >> and eventually kernel hangs.
> >> 
> >> Git's bisection points to this patch and reverting it helps. Please fix,
> >> thanks in advance.
> >
> >The above is definitely wrong - pXX_addr_end() are designed to be used
> >with an address index within the pXX table table and the address index
> >of either the last entry in the same pXX table or the beginning of the
> >_next_ pXX table.  Arbitary end address indicies are not allowed.
> >
> 
> #define pmd_addr_end(addr, end)						\
> ({	unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK;	\
> 	(__boundary - 1 < (end) - 1)? __boundary: (end);		\
> })
> 
> If my understanding is correct, the definition here align the addr to next PMD
> boundary or end.
> 
> I don't see the possibility to across another PMD. Do I miss something?

Look at the definition of p*_addr_end() that are used when page tables
are rolled up.

> >When page tables are "rolled up" when levels don't exist, it is common
> >practice for these macros to just return their end address index.
> >Hence, if they are used with arbitary end address indicies, then the
> >iteration will fail.
> >
> >The only way to do this is:
> >
> >	next = pmd_addr_end(old_addr,
> >			pud_addr_end(old_addr,
> >				p4d_addr_end(old_addr,
> >					pgd_addr_end(old_addr, old_end))));
> >
> >which gives pmd_addr_end() (and each of the intermediate pXX_addr_end())
> >the correct end argument.  However, that's a more complex and verbose,
> >and likely less efficient than the current code.
> >
> >I'd suggest that there's nothing to "fix" in the v5.5 code wrt this,
> >and trying to "clean it up" will just result in less efficient or
> >broken code.
> >
> >-- 
> >RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> >FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
> >According to speedtest.net: 11.9Mbps down 500kbps up
> 
> -- 
> Wei Yang
> Help you, Help me
> 

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up

WARNING: multiple messages have this Message-ID (diff)
From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Wei Yang <richardw.yang@linux.intel.com>
Cc: thellstrom@vmware.com, yang.shi@linux.alibaba.com,
	akpm@linux-foundation.org, aneesh.kumar@linux.ibm.com,
	linux-kernel@vger.kernel.org, Jon Hunter <jonathanh@nvidia.com>,
	linux-mm@kvack.org, Thierry Reding <thierry.reding@gmail.com>,
	"linux-tegra@vger.kernel.org" <linux-tegra@vger.kernel.org>,
	kirill@shutemov.name, Dmitry Osipenko <digetx@gmail.com>,
	dan.j.williams@intel.com,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 3/5] mm/mremap: use pmd_addr_end to calculate next in move_page_tables()
Date: Wed, 29 Jan 2020 23:24:41 +0000	[thread overview]
Message-ID: <20200129232441.GI25745@shell.armlinux.org.uk> (raw)
In-Reply-To: <20200129215745.GA20736@richard>

On Thu, Jan 30, 2020 at 05:57:45AM +0800, Wei Yang wrote:
> On Wed, Jan 29, 2020 at 09:47:38AM +0000, Russell King - ARM Linux admin wrote:
> >On Sun, Jan 26, 2020 at 05:47:57PM +0300, Dmitry Osipenko wrote:
> >> 18.01.2020 02:22, Wei Yang пишет:
> >> > Use the general helper instead of do it by hand.
> >> > 
> >> > Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
> >> > ---
> >> >  mm/mremap.c | 7 ++-----
> >> >  1 file changed, 2 insertions(+), 5 deletions(-)
> >> > 
> >> > diff --git a/mm/mremap.c b/mm/mremap.c
> >> > index c2af8ba4ba43..a258914f3ee1 100644
> >> > --- a/mm/mremap.c
> >> > +++ b/mm/mremap.c
> >> > @@ -253,11 +253,8 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
> >> >  
> >> >  	for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
> >> >  		cond_resched();
> >> > -		next = (old_addr + PMD_SIZE) & PMD_MASK;
> >> > -		/* even if next overflowed, extent below will be ok */
> >> > +		next = pmd_addr_end(old_addr, old_end);
> >> >  		extent = next - old_addr;
> >> > -		if (extent > old_end - old_addr)
> >> > -			extent = old_end - old_addr;
> >> >  		old_pmd = get_old_pmd(vma->vm_mm, old_addr);
> >> >  		if (!old_pmd)
> >> >  			continue;
> >> > @@ -301,7 +298,7 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
> >> >  
> >> >  		if (pte_alloc(new_vma->vm_mm, new_pmd))
> >> >  			break;
> >> > -		next = (new_addr + PMD_SIZE) & PMD_MASK;
> >> > +		next = pmd_addr_end(new_addr, new_addr + len);
> >> >  		if (extent > next - new_addr)
> >> >  			extent = next - new_addr;
> >> >  		move_ptes(vma, old_pmd, old_addr, old_addr + extent, new_vma,
> >> > 
> >> 
> >> Hello Wei,
> >> 
> >> Starting with next-20200122, I'm seeing the following in KMSG on NVIDIA
> >> Tegra (ARM32):
> >> 
> >>   BUG: Bad rss-counter state mm:(ptrval) type:MM_ANONPAGES val:190
> >> 
> >> and eventually kernel hangs.
> >> 
> >> Git's bisection points to this patch and reverting it helps. Please fix,
> >> thanks in advance.
> >
> >The above is definitely wrong - pXX_addr_end() are designed to be used
> >with an address index within the pXX table table and the address index
> >of either the last entry in the same pXX table or the beginning of the
> >_next_ pXX table.  Arbitary end address indicies are not allowed.
> >
> 
> #define pmd_addr_end(addr, end)						\
> ({	unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK;	\
> 	(__boundary - 1 < (end) - 1)? __boundary: (end);		\
> })
> 
> If my understanding is correct, the definition here align the addr to next PMD
> boundary or end.
> 
> I don't see the possibility to across another PMD. Do I miss something?

Look at the definition of p*_addr_end() that are used when page tables
are rolled up.

> >When page tables are "rolled up" when levels don't exist, it is common
> >practice for these macros to just return their end address index.
> >Hence, if they are used with arbitary end address indicies, then the
> >iteration will fail.
> >
> >The only way to do this is:
> >
> >	next = pmd_addr_end(old_addr,
> >			pud_addr_end(old_addr,
> >				p4d_addr_end(old_addr,
> >					pgd_addr_end(old_addr, old_end))));
> >
> >which gives pmd_addr_end() (and each of the intermediate pXX_addr_end())
> >the correct end argument.  However, that's a more complex and verbose,
> >and likely less efficient than the current code.
> >
> >I'd suggest that there's nothing to "fix" in the v5.5 code wrt this,
> >and trying to "clean it up" will just result in less efficient or
> >broken code.
> >
> >-- 
> >RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> >FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
> >According to speedtest.net: 11.9Mbps down 500kbps up
> 
> -- 
> Wei Yang
> Help you, Help me
> 

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-01-29 23:24 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-17 23:22 [PATCH 0/5] mm/mremap.c: cleanup move_page_tables() a little Wei Yang
2020-01-17 23:22 ` [PATCH 1/5] mm/mremap: format the check in move_normal_pmd() same as move_huge_pmd() Wei Yang
2020-01-17 23:22 ` [PATCH 2/5] mm/mremap: it is sure to have enough space when extent meets requirement Wei Yang
2020-01-17 23:22 ` [PATCH 3/5] mm/mremap: use pmd_addr_end to calculate next in move_page_tables() Wei Yang
     [not found]   ` <20200117232254.2792-4-richardw.yang-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2020-01-26 14:47     ` Dmitry Osipenko
2020-01-26 14:47       ` Dmitry Osipenko
2020-01-26 14:47       ` Dmitry Osipenko
2020-01-26 14:47       ` Dmitry Osipenko
     [not found]       ` <7147774a-14e9-4ff3-1548-4565f0d214d5-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2020-01-27  2:59         ` Andrew Morton
2020-01-27  2:59           ` Andrew Morton
2020-01-27  2:59           ` Andrew Morton
2020-01-27  2:59           ` Andrew Morton
2020-01-29 17:18           ` Dmitry Osipenko
2020-01-29 17:18             ` Dmitry Osipenko
2020-01-29 17:18             ` Dmitry Osipenko
2020-01-29 23:59             ` Andrew Morton
2020-01-29 23:59               ` Andrew Morton
2020-01-29 23:59               ` Andrew Morton
     [not found]               ` <20200129155907.75868e8a36c5fffc3ec354b9-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
2020-01-30  0:28                 ` Stephen Rothwell
2020-01-30  0:28                   ` Stephen Rothwell
2020-01-30  0:28                   ` Stephen Rothwell
2020-01-30  0:28                   ` Stephen Rothwell
2020-01-29  9:47         ` Russell King - ARM Linux admin
2020-01-29  9:47           ` Russell King - ARM Linux admin
2020-01-29  9:47           ` Russell King - ARM Linux admin
2020-01-29  9:47           ` Russell King - ARM Linux admin
2020-01-29 14:21           ` Dmitry Osipenko
2020-01-29 14:21             ` Dmitry Osipenko
2020-01-29 14:21             ` Dmitry Osipenko
     [not found]           ` <20200129094738.GE25745-QEMnZ+CodIVURfEZ8mYm6t73F7V6hmMc@public.gmane.org>
2020-01-29 21:57             ` Wei Yang
2020-01-29 21:57               ` Wei Yang
2020-01-29 21:57               ` Wei Yang
2020-01-29 21:57               ` Wei Yang
2020-01-29 23:24               ` Russell King - ARM Linux admin [this message]
2020-01-29 23:24                 ` Russell King - ARM Linux admin
2020-01-29 23:24                 ` Russell King - ARM Linux admin
     [not found]                 ` <20200129232441.GI25745-QEMnZ+CodIVURfEZ8mYm6t73F7V6hmMc@public.gmane.org>
2020-01-30  1:30                   ` Wei Yang
2020-01-30  1:30                     ` Wei Yang
2020-01-30  1:30                     ` Wei Yang
2020-01-30  1:30                     ` Wei Yang
2020-01-30 14:15                     ` Russell King - ARM Linux admin
2020-01-30 14:15                       ` Russell King - ARM Linux admin
2020-01-30 14:15                       ` Russell King - ARM Linux admin
2020-01-30 14:15                       ` Russell King - ARM Linux admin
     [not found]                       ` <20200130141505.GK25745-QEMnZ+CodIVURfEZ8mYm6t73F7V6hmMc@public.gmane.org>
2020-01-30 21:57                         ` Wei Yang
2020-01-30 21:57                           ` Wei Yang
2020-01-30 21:57                           ` Wei Yang
2020-01-30 21:57                           ` Wei Yang
2020-01-28  0:43       ` Wei Yang
2020-01-28  0:43         ` Wei Yang
2020-01-28  0:43         ` Wei Yang
2020-01-28 15:59         ` Dmitry Osipenko
2020-01-28 15:59           ` Dmitry Osipenko
2020-01-28 15:59           ` Dmitry Osipenko
2020-01-28 15:59           ` Dmitry Osipenko
     [not found]           ` <d66bb20e-c0e7-caef-cbbc-aa216c2be7d6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2020-01-28 23:29             ` Wei Yang
2020-01-28 23:29               ` Wei Yang
2020-01-28 23:29               ` Wei Yang
2020-01-28 23:29               ` Wei Yang
2020-01-28 23:35               ` Dmitry Osipenko
2020-01-28 23:35                 ` Dmitry Osipenko
2020-01-28 23:35                 ` Dmitry Osipenko
2020-01-28 23:35                 ` Dmitry Osipenko
2020-01-29  0:28                 ` Wei Yang
2020-01-29  0:28                   ` Wei Yang
2020-01-29  0:28                   ` Wei Yang
2020-01-29 18:56                   ` Dmitry Osipenko
2020-01-29 18:56                     ` Dmitry Osipenko
2020-01-29 18:56                     ` Dmitry Osipenko
2020-01-17 23:22 ` [PATCH 4/5] mm/mremap: calculate extent in one place Wei Yang
2020-01-17 23:22 ` [PATCH 5/5] mm/mremap: start addresses are properly aligned Wei Yang
2020-01-19  0:07 ` [PATCH 0/5] mm/mremap.c: cleanup move_page_tables() a little Andrew Morton
2020-01-19  2:11   ` Wei Yang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200129232441.GI25745@shell.armlinux.org.uk \
    --to=linux@armlinux.org.uk \
    --cc=akpm@linux-foundation.org \
    --cc=aneesh.kumar@linux.ibm.com \
    --cc=dan.j.williams@intel.com \
    --cc=digetx@gmail.com \
    --cc=jonathanh@nvidia.com \
    --cc=kirill@shutemov.name \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=richardw.yang@linux.intel.com \
    --cc=thellstrom@vmware.com \
    --cc=thierry.reding@gmail.com \
    --cc=yang.shi@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.