All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>, Hugh Dickins <hughd@google.com>,
	Rik van Riel <riel@redhat.com>, Ingo Molnar <mingo@kernel.org>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	Hillf Danton <dhillf@gmail.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 1/9] mm/rmap: recompute pgoff for huge page
Date: Tue, 3 Dec 2013 11:01:41 +0900	[thread overview]
Message-ID: <20131203020141.GA31168@lge.com> (raw)
In-Reply-To: <20131202144434.2afc2b5bb69f2b4b45608e4e@linux-foundation.org>

On Mon, Dec 02, 2013 at 02:44:34PM -0800, Andrew Morton wrote:
> On Thu, 28 Nov 2013 16:48:38 +0900 Joonsoo Kim <iamjoonsoo.kim@lge.com> wrote:
> 
> > We have to recompute pgoff if the given page is huge, since result based
> > on HPAGE_SIZE is not approapriate for scanning the vma interval tree, as
> > shown by commit 36e4f20af833 ("hugetlb: do not use vma_hugecache_offset()
> > for vma_prio_tree_foreach") and commit 369a713e ("rmap: recompute pgoff
> > for unmapping huge page").
> > 
> > ...
> >
> > --- a/mm/rmap.c
> > +++ b/mm/rmap.c
> > @@ -1714,6 +1714,10 @@ static int rmap_walk_file(struct page *page, int (*rmap_one)(struct page *,
> >  
> >  	if (!mapping)
> >  		return ret;
> > +
> > +	if (PageHuge(page))
> > +		pgoff = page->index << compound_order(page);
> > +
> >  	mutex_lock(&mapping->i_mmap_mutex);
> >  	vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
> >  		unsigned long address = vma_address(page, vma);
> 
> a)  Can't we just do this?
> 
> --- a/mm/rmap.c~mm-rmap-recompute-pgoff-for-huge-page-fix
> +++ a/mm/rmap.c
> @@ -1708,16 +1708,13 @@ static int rmap_walk_file(struct page *p
>  		struct vm_area_struct *, unsigned long, void *), void *arg)
>  {
>  	struct address_space *mapping = page->mapping;
> -	pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
> +	pgoff_t pgoff = page->index << compound_order(page);
>  	struct vm_area_struct *vma;
>  	int ret = SWAP_AGAIN;
>  
>  	if (!mapping)
>  		return ret;
>  
> -	if (PageHuge(page))
> -		pgoff = page->index << compound_order(page);
> -
>  	mutex_lock(&mapping->i_mmap_mutex);
>  	vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
>  		unsigned long address = vma_address(page, vma);
> 
> compound_order() does the right thing for all styles of page, yes?

Yes. I will change.

> 
> b) If that PageHuge() test you added the correct thing to use?
> 
> /*
>  * PageHuge() only returns true for hugetlbfs pages, but not for normal or
>  * transparent huge pages.  See the PageTransHuge() documentation for more
>  * details.
>  */
> 
>    Obviously we won't be encountering transparent huge pages here,
>    but what's the best future-safe approach?

compound_order() also works for transparent huge pages, so it may be safe way.

> I hate that PageHuge() oddity with a passion!  Maybe it would be better
> if it was called PageHugetlbfs.

I also think that PageHuge() is odd name.
It has only 50 call sites. Let's change it :)

Thanks.

> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>, Hugh Dickins <hughd@google.com>,
	Rik van Riel <riel@redhat.com>, Ingo Molnar <mingo@kernel.org>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	Hillf Danton <dhillf@gmail.com>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 1/9] mm/rmap: recompute pgoff for huge page
Date: Tue, 3 Dec 2013 11:01:41 +0900	[thread overview]
Message-ID: <20131203020141.GA31168@lge.com> (raw)
In-Reply-To: <20131202144434.2afc2b5bb69f2b4b45608e4e@linux-foundation.org>

On Mon, Dec 02, 2013 at 02:44:34PM -0800, Andrew Morton wrote:
> On Thu, 28 Nov 2013 16:48:38 +0900 Joonsoo Kim <iamjoonsoo.kim@lge.com> wrote:
> 
> > We have to recompute pgoff if the given page is huge, since result based
> > on HPAGE_SIZE is not approapriate for scanning the vma interval tree, as
> > shown by commit 36e4f20af833 ("hugetlb: do not use vma_hugecache_offset()
> > for vma_prio_tree_foreach") and commit 369a713e ("rmap: recompute pgoff
> > for unmapping huge page").
> > 
> > ...
> >
> > --- a/mm/rmap.c
> > +++ b/mm/rmap.c
> > @@ -1714,6 +1714,10 @@ static int rmap_walk_file(struct page *page, int (*rmap_one)(struct page *,
> >  
> >  	if (!mapping)
> >  		return ret;
> > +
> > +	if (PageHuge(page))
> > +		pgoff = page->index << compound_order(page);
> > +
> >  	mutex_lock(&mapping->i_mmap_mutex);
> >  	vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
> >  		unsigned long address = vma_address(page, vma);
> 
> a)  Can't we just do this?
> 
> --- a/mm/rmap.c~mm-rmap-recompute-pgoff-for-huge-page-fix
> +++ a/mm/rmap.c
> @@ -1708,16 +1708,13 @@ static int rmap_walk_file(struct page *p
>  		struct vm_area_struct *, unsigned long, void *), void *arg)
>  {
>  	struct address_space *mapping = page->mapping;
> -	pgoff_t pgoff = page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
> +	pgoff_t pgoff = page->index << compound_order(page);
>  	struct vm_area_struct *vma;
>  	int ret = SWAP_AGAIN;
>  
>  	if (!mapping)
>  		return ret;
>  
> -	if (PageHuge(page))
> -		pgoff = page->index << compound_order(page);
> -
>  	mutex_lock(&mapping->i_mmap_mutex);
>  	vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
>  		unsigned long address = vma_address(page, vma);
> 
> compound_order() does the right thing for all styles of page, yes?

Yes. I will change.

> 
> b) If that PageHuge() test you added the correct thing to use?
> 
> /*
>  * PageHuge() only returns true for hugetlbfs pages, but not for normal or
>  * transparent huge pages.  See the PageTransHuge() documentation for more
>  * details.
>  */
> 
>    Obviously we won't be encountering transparent huge pages here,
>    but what's the best future-safe approach?

compound_order() also works for transparent huge pages, so it may be safe way.

> I hate that PageHuge() oddity with a passion!  Maybe it would be better
> if it was called PageHugetlbfs.

I also think that PageHuge() is odd name.
It has only 50 call sites. Let's change it :)

Thanks.

> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2013-12-03  1:59 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-28  7:48 [PATCH 0/9] mm/rmap: unify rmap traversing functions through rmap_walk Joonsoo Kim
2013-11-28  7:48 ` Joonsoo Kim
2013-11-28  7:48 ` [PATCH 1/9] mm/rmap: recompute pgoff for huge page Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-12-02 22:44   ` Andrew Morton
2013-12-02 22:44     ` Andrew Morton
2013-12-03  2:01     ` Joonsoo Kim [this message]
2013-12-03  2:01       ` Joonsoo Kim
2013-11-28  7:48 ` [PATCH 2/9] mm/rmap: factor nonlinear handling out of try_to_unmap_file() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-11-28  7:48 ` [PATCH 3/9] mm/rmap: factor lock function out of rmap_walk_anon() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-11-28  7:48 ` [PATCH 4/9] mm/rmap: make rmap_walk to get the rmap_walk_control argument Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-12-02 22:51     ` Andrew Morton
2013-12-02 22:51       ` Andrew Morton
2013-12-03  2:03       ` Joonsoo Kim
2013-12-03  2:03         ` Joonsoo Kim
2013-12-02 22:52   ` Andrew Morton
2013-12-02 22:52     ` Andrew Morton
2013-11-28  7:48 ` [PATCH 5/9] mm/rmap: extend rmap_walk_xxx() to cope with different cases Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-12-03  2:05     ` Joonsoo Kim
2013-12-03  2:05       ` Joonsoo Kim
2013-11-28  7:48 ` [PATCH 6/9] mm/rmap: use rmap_walk() in try_to_unmap() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-12-02 23:01   ` Andrew Morton
2013-12-02 23:01     ` Andrew Morton
2013-12-03  2:08     ` Joonsoo Kim
2013-12-03  2:08       ` Joonsoo Kim
2013-11-28  7:48 ` [PATCH 7/9] mm/rmap: use rmap_walk() in try_to_munlock() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:09   ` Naoya Horiguchi
2013-12-02 20:09     ` Naoya Horiguchi
2013-11-28  7:48 ` [PATCH 8/9] mm/rmap: use rmap_walk() in page_referenced() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:10   ` Naoya Horiguchi
2013-12-02 20:10     ` Naoya Horiguchi
2013-11-28  7:48 ` [PATCH 9/9] mm/rmap: use rmap_walk() in page_mkclean() Joonsoo Kim
2013-11-28  7:48   ` Joonsoo Kim
2013-12-02 20:10   ` Naoya Horiguchi
2013-12-02 20:10     ` Naoya Horiguchi

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=20131203020141.GA31168@lge.com \
    --to=iamjoonsoo.kim@lge.com \
    --cc=akpm@linux-foundation.org \
    --cc=dhillf@gmail.com \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=mingo@kernel.org \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=riel@redhat.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.