Message ID | 20200311172440.6988-1-vbabka@suse.cz (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm/hugetlb: remove unnecessary memory fetch in PageHeadHuge() | expand |
On 3/11/20 10:24 AM, Vlastimil Babka wrote: > Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word > in struct page") changed compound_dtor from a pointer to an array index in > order to pack it. To check if page has the hugeltbfs compound_dtor, we can > just compare the index directly without fetching the function pointer. > Said commit did that with PageHuge() and we can do the same with PageHeadHuge() > to make the code a bit smaller and faster. > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz> > Cc: Mike Kravetz <mike.kravetz@oracle.com> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Thanks! Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
On Wed, 11 Mar 2020, Vlastimil Babka wrote: > Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word > in struct page") changed compound_dtor from a pointer to an array index in > order to pack it. To check if page has the hugeltbfs compound_dtor, we can > just compare the index directly without fetching the function pointer. > Said commit did that with PageHuge() and we can do the same with PageHeadHuge() > to make the code a bit smaller and faster. > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz> > Cc: Mike Kravetz <mike.kravetz@oracle.com> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Fixes: f1e61557f023 ("mm: pack compound_dtor and compound_order into one word in struct page") Acked-by: David Rientjes <rientjes@google.com> [+nehaagarwal] We've been running with this patch for a few years and it works as intended. > --- > mm/hugetlb.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index dd8737a94bec..ba1ca452aa7f 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -1313,7 +1313,7 @@ int PageHeadHuge(struct page *page_head) > if (!PageHead(page_head)) > return 0; > > - return get_compound_page_dtor(page_head) == free_huge_page; > + return page_head[1].compound_dtor == HUGETLB_PAGE_DTOR; > } > > pgoff_t __basepage_index(struct page *page)
On Wed, Mar 11, 2020 at 06:24:40PM +0100, Vlastimil Babka wrote: > Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word > in struct page") changed compound_dtor from a pointer to an array index in > order to pack it. To check if page has the hugeltbfs compound_dtor, we can > just compare the index directly without fetching the function pointer. > Said commit did that with PageHuge() and we can do the same with PageHeadHuge() > to make the code a bit smaller and faster. > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz> > Cc: Mike Kravetz <mike.kravetz@oracle.com> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> We use literaly the same check in the function next to this one -- PageHuge().
On Thu, Mar 12, 2020 at 03:41:19AM +0300, Kirill A. Shutemov wrote: > On Wed, Mar 11, 2020 at 06:24:40PM +0100, Vlastimil Babka wrote: > > Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word > > in struct page") changed compound_dtor from a pointer to an array index in > > order to pack it. To check if page has the hugeltbfs compound_dtor, we can > > just compare the index directly without fetching the function pointer. > > Said commit did that with PageHuge() and we can do the same with PageHeadHuge() > > to make the code a bit smaller and faster. > > > > Signed-off-by: Vlastimil Babka <vbabka@suse.cz> > > Cc: Mike Kravetz <mike.kravetz@oracle.com> > > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > > Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > > We use literaly the same check in the function next to this one -- > PageHuge(). Ugh.. I have to read the commit message, not only the code :P
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index dd8737a94bec..ba1ca452aa7f 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1313,7 +1313,7 @@ int PageHeadHuge(struct page *page_head) if (!PageHead(page_head)) return 0; - return get_compound_page_dtor(page_head) == free_huge_page; + return page_head[1].compound_dtor == HUGETLB_PAGE_DTOR; } pgoff_t __basepage_index(struct page *page)
Commit f1e61557f023 ("mm: pack compound_dtor and compound_order into one word in struct page") changed compound_dtor from a pointer to an array index in order to pack it. To check if page has the hugeltbfs compound_dtor, we can just compare the index directly without fetching the function pointer. Said commit did that with PageHuge() and we can do the same with PageHeadHuge() to make the code a bit smaller and faster. Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> --- mm/hugetlb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)