Messages in this thread | | | Date | Tue, 19 Nov 2013 14:27:24 -0700 | From | Khalid Aziz <> | Subject | Re: [PATCH 3/3] mm: tail page refcounting optimization for slab and hugetlbfs |
| |
On 11/15/2013 10:47 AM, Andrea Arcangeli wrote: > This skips the _mapcount mangling for slab and hugetlbfs pages. > > The main trouble in doing this is to guarantee that PageSlab and > PageHeadHuge remains constant for all get_page/put_page run on the > tail of slab or hugetlbfs compound pages. Otherwise if they're set > during get_page but not set during put_page, the _mapcount of the tail > page would underflow. > > PageHeadHuge will remain true until the compound page is released and > enters the buddy allocator so it won't risk to change even if the tail > page is the last reference left on the page. > > PG_slab instead is cleared before the slab frees the head page with > put_page, so if the tail pin is released after the slab freed the > page, we would have a problem. But in the slab case the tail pin > cannot be the last reference left on the page. This is because the > slab code is free to reuse the compound page after a > kfree/kmem_cache_free without having to check if there's any tail pin > left. In turn all tail pins must be always released while the head is > still pinned by the slab code and so we know PG_slab will be still set > too. > > Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Reviewed-by: Khalid Aziz <khalid.aziz@oracle.com>
-- Khalid
| |