| From: Sidhartha Kumar <sidhartha.kumar@oracle.com> |
| Subject: mm/hugetlb: add folio_hstate() |
| Date: Thu, 22 Sep 2022 10:42:07 -0500 |
| |
| Helper function to retrieve hstate information from a hugetlb folio. |
| |
| Link: https://lkml.kernel.org/r/20220922154207.1575343-6-sidhartha.kumar@oracle.com |
| Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com> |
| Reported-by: kernel test robot <lkp@intel.com> |
| Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Cc: Colin Cross <ccross@google.com> |
| Cc: David Howells <dhowells@redhat.com> |
| Cc: "Eric W . Biederman" <ebiederm@xmission.com> |
| Cc: Hugh Dickins <hughd@google.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: Muchun Song <songmuchun@bytedance.com> |
| Cc: Peter Xu <peterx@redhat.com> |
| Cc: Vlastimil Babka <vbabka@suse.cz> |
| Cc: William Kucharski <william.kucharski@oracle.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| include/linux/hugetlb.h | 14 ++++++++++++-- |
| mm/migrate.c | 2 +- |
| 2 files changed, 13 insertions(+), 3 deletions(-) |
| |
| --- a/include/linux/hugetlb.h~mm-hugetlb-add-folio_hstate |
| +++ a/include/linux/hugetlb.h |
| @@ -824,10 +824,15 @@ static inline pte_t arch_make_huge_pte(p |
| } |
| #endif |
| |
| +static inline struct hstate *folio_hstate(struct folio *folio) |
| +{ |
| + VM_BUG_ON_FOLIO(!folio_test_hugetlb(folio), folio); |
| + return size_to_hstate(folio_size(folio)); |
| +} |
| + |
| static inline struct hstate *page_hstate(struct page *page) |
| { |
| - VM_BUG_ON_PAGE(!PageHuge(page), page); |
| - return size_to_hstate(page_size(page)); |
| + return folio_hstate(page_folio(page)); |
| } |
| |
| static inline unsigned hstate_index_to_shift(unsigned index) |
| @@ -1035,6 +1040,11 @@ static inline struct hstate *hstate_vma( |
| { |
| return NULL; |
| } |
| + |
| +static inline struct hstate *folio_hstate(struct folio *folio) |
| +{ |
| + return NULL; |
| +} |
| |
| static inline struct hstate *page_hstate(struct page *page) |
| { |
| --- a/mm/migrate.c~mm-hugetlb-add-folio_hstate |
| +++ a/mm/migrate.c |
| @@ -1620,7 +1620,7 @@ struct page *alloc_migration_target(stru |
| nid = folio_nid(folio); |
| |
| if (folio_test_hugetlb(folio)) { |
| - struct hstate *h = page_hstate(&folio->page); |
| + struct hstate *h = folio_hstate(folio); |
| |
| gfp_mask = htlb_modify_alloc_mask(h, gfp_mask); |
| return alloc_huge_page_nodemask(h, nid, mtc->nmask, gfp_mask); |
| _ |