On Wed, Mar 25, 2015 at 03:48:48PM -0700, Hugh Dickins wrote: > On Wed, 25 Mar 2015, Hugh Dickins wrote: > > On Thu, 26 Mar 2015, Kirill A. Shutemov wrote: > > > > > THP uses tail page refcounting to be able to split huge page at any > > > time. Tail page refcounting is not needed for rest users of compound > > > pages and it's harmful because of overhead. > > > > > > We try to exclude non-THP pages from tail page refcounting using > > > __compound_tail_refcounted() check. It excludes most common non-THP > > > compound pages: SL*B and hugetlb, but it doesn't catch rest of > > > __GFP_COMP users -- drivers. > > > > > > And it's not only about overhead. > > > > > > Drivers might want to use compound pages to get refcounting semantics > > > suitable for mapping high-order pages to userspace. But tail page > > > refcounting breaks it. > > > > > > Tail page refcounting uses ->_mapcount in tail pages to store GUP pins > > > on them. It means GUP pins would affect page_mapcount() for tail pages. > > > It's not a problem for THP, because it never maps tail pages. But unlike > > > THP, drivers map parts of compound pages with PTEs and it makes > > > page_mapcount() be called for tail pages. > > > > > > In particular, GUP pins would shift PSS up and affect /proc/kpagecount > > > for such pages. But, I'm not aware about anything which can lead to > > > crash or other serious misbehaviour. > > > > > > Since currently all THP pages are anonymous and all drivers pages are > > > not, we can fix the __compound_tail_refcounted() check by requiring > > > PageAnon() to enable tail page refcounting. > > > > > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > > > > Acked-by: Hugh Dickins <hughd@xxxxxxxxxx> > > Oh, hold on a moment: does this actually build in a tree without your > page-flags.h consolidation? It didn't when I tried to add a PageAnon > test there for my series against v3.19, has something changed in v4.0? No. I haven't tried to build it without my patchset, but it seems it wouldn't. Just check: it would build for me on top of [PATCH 01/16], you've acked. -- 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>