[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150515111438.GB6250@node.dhcp.inet.fi>
Date: Fri, 15 May 2015 14:14:38 +0300
From: "Kirill A. Shutemov" <kirill@...temov.name>
To: Vlastimil Babka <vbabka@...e.cz>
Cc: "Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Andrea Arcangeli <aarcange@...hat.com>,
Hugh Dickins <hughd@...gle.com>,
Dave Hansen <dave.hansen@...el.com>,
Mel Gorman <mgorman@...e.de>, Rik van Riel <riel@...hat.com>,
Christoph Lameter <cl@...two.org>,
Naoya Horiguchi <n-horiguchi@...jp.nec.com>,
Steve Capper <steve.capper@...aro.org>,
"Aneesh Kumar K.V" <aneesh.kumar@...ux.vnet.ibm.com>,
Johannes Weiner <hannes@...xchg.org>,
Michal Hocko <mhocko@...e.cz>,
Jerome Marchand <jmarchan@...hat.com>,
Sasha Levin <sasha.levin@...cle.com>,
linux-kernel@...r.kernel.org, linux-mm@...ck.org
Subject: Re: [PATCHv5 02/28] rmap: add argument to charge compound page
On Thu, May 14, 2015 at 06:07:48PM +0200, Vlastimil Babka wrote:
> On 04/23/2015 11:03 PM, Kirill A. Shutemov wrote:
> >We're going to allow mapping of individual 4k pages of THP compound
> >page. It means we cannot rely on PageTransHuge() check to decide if
> >map/unmap small page or THP.
> >
> >The patch adds new argument to rmap functions to indicate whether we want
> >to operate on whole compound page or only the small page.
> >
> >Signed-off-by: Kirill A. Shutemov <kirill.shutemov@...ux.intel.com>
> >Tested-by: Sasha Levin <sasha.levin@...cle.com>
>
> Acked-by: Vlastimil Babka <vbabka@...e.cz>
>
> But I wonder about one thing:
>
> >-void page_remove_rmap(struct page *page)
> >+void page_remove_rmap(struct page *page, bool compound)
> > {
> >+ int nr = compound ? hpage_nr_pages(page) : 1;
> >+
> > if (!PageAnon(page)) {
> >+ VM_BUG_ON_PAGE(compound && !PageHuge(page), page);
> > page_remove_file_rmap(page);
> > return;
> > }
>
> The function continues by:
>
> /* page still mapped by someone else? */
> if (!atomic_add_negative(-1, &page->_mapcount))
> return;
>
> /* Hugepages are not counted in NR_ANON_PAGES for now. */
> if (unlikely(PageHuge(page)))
> return;
>
> The handling of compound parameter for PageHuge() pages feels just weird.
> You use hpage_nr_pages() for them which tests PageTransHuge(). It doesn't
> break anything and the value of nr is effectively ignored anyway, but
> still...
>
> So I wonder, if all callers of page_remove_rmap() for PageHuge() pages are
> the two in mm/hugetlb.c, why not just create a special case function?
It's fair question. I think we shouldn't do this. It makes hugetlb even
more special place, alien to rest of mm.
And this is out of scope of the patchset in question.
> Or are some callers elsewhere, not aware whether they are calling this
> on a PageHuge()? So compound might be even false for those?
Caller sets compound==true based on whether the page is mapped with
PMD/PUD or not. It's nothing to do with what page type it is.
> If that's all possible and legal, then maybe explain it in a comment to
> reduce confusion of further readers. And move the 'nr' assignment to a
> place where we are sure it's not a PageHuge(), i.e. right above the
> place the value is used, perhaps?
I'll rework code a bit in v6.
--
Kirill A. Shutemov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists