mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
mm/compaction: use folio in hugetlb pathway
Use a folio in the hugetlb pathway during the compaction migrate-able pageblock scan. This removes a call to compound_head(). Link: https://lkml.kernel.org/r/20250401021025.637333-2-vishal.moola@gmail.com Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> Acked-by: Oscar Salvador <osalvador@suse.de> Reviewed-by: Zi Yan <ziy@nvidia.com> Cc: Muchun Song <muchun.song@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
6e3d1b1813
commit
b4c829fa4d
|
|
@ -695,7 +695,7 @@ struct huge_bootmem_page {
|
|||
|
||||
bool hugetlb_bootmem_page_zones_valid(int nid, struct huge_bootmem_page *m);
|
||||
|
||||
int isolate_or_dissolve_huge_page(struct page *page, struct list_head *list);
|
||||
int isolate_or_dissolve_huge_folio(struct folio *folio, struct list_head *list);
|
||||
int replace_free_hugepage_folios(unsigned long start_pfn, unsigned long end_pfn);
|
||||
void wait_for_freed_hugetlb_folios(void);
|
||||
struct folio *alloc_hugetlb_folio(struct vm_area_struct *vma,
|
||||
|
|
@ -1083,7 +1083,7 @@ static inline struct folio *filemap_lock_hugetlb_folio(struct hstate *h,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline int isolate_or_dissolve_huge_page(struct page *page,
|
||||
static inline int isolate_or_dissolve_huge_folio(struct folio *folio,
|
||||
struct list_head *list)
|
||||
{
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -1001,10 +1001,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
|
|||
locked = NULL;
|
||||
}
|
||||
|
||||
ret = isolate_or_dissolve_huge_page(page, &cc->migratepages);
|
||||
folio = page_folio(page);
|
||||
ret = isolate_or_dissolve_huge_folio(folio, &cc->migratepages);
|
||||
|
||||
/*
|
||||
* Fail isolation in case isolate_or_dissolve_huge_page()
|
||||
* Fail isolation in case isolate_or_dissolve_huge_folio()
|
||||
* reports an error. In case of -ENOMEM, abort right away.
|
||||
*/
|
||||
if (ret < 0) {
|
||||
|
|
@ -1016,12 +1017,11 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
|
|||
goto isolate_fail;
|
||||
}
|
||||
|
||||
if (PageHuge(page)) {
|
||||
if (folio_test_hugetlb(folio)) {
|
||||
/*
|
||||
* Hugepage was successfully isolated and placed
|
||||
* on the cc->migratepages list.
|
||||
*/
|
||||
folio = page_folio(page);
|
||||
low_pfn += folio_nr_pages(folio) - 1;
|
||||
goto isolate_success_no_list;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2896,10 +2896,9 @@ static int alloc_and_dissolve_hugetlb_folio(struct hstate *h,
|
|||
return ret;
|
||||
}
|
||||
|
||||
int isolate_or_dissolve_huge_page(struct page *page, struct list_head *list)
|
||||
int isolate_or_dissolve_huge_folio(struct folio *folio, struct list_head *list)
|
||||
{
|
||||
struct hstate *h;
|
||||
struct folio *folio = page_folio(page);
|
||||
int ret = -EBUSY;
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user