Re: [PATCHv5 02/28] rmap: add argument to charge compound page

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]