Re: [PATCHv5 02/28] rmap: add argument to charge compound page
From: Kirill A. Shutemov
Date: Fri May 15 2015 - 07:15:13 EST
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@xxxxxxxxxxxxxxx>
> >Tested-by: Sasha Levin <sasha.levin@xxxxxxxxxx>
>
> Acked-by: Vlastimil Babka <vbabka@xxxxxxx>
>
> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/