Messages in this thread | | | Date | Fri, 6 Jan 2023 16:54:37 -0800 | From | Mike Kravetz <> | Subject | Re: [PATCH mm-unstable 6/8] mm/hugetlb: convert alloc_migrate_huge_page to folios |
| |
On 01/03/23 13:13, Sidhartha Kumar wrote: > Change alloc_huge_page_nodemask() to alloc_hugetlb_folio_nodemask() and > alloc_migrate_huge_page() to alloc_migrate_hugetlb_folio(). Both functions > now return a folio rather than a page.
> /* mempolicy aware migration callback */ > @@ -2357,16 +2357,16 @@ struct page *alloc_huge_page_vma(struct hstate *h, struct vm_area_struct *vma, > { > struct mempolicy *mpol; > nodemask_t *nodemask; > - struct page *page; > + struct folio *folio; > gfp_t gfp_mask; > int node; > > gfp_mask = htlb_alloc_mask(h); > node = huge_node(vma, address, gfp_mask, &mpol, &nodemask); > - page = alloc_huge_page_nodemask(h, node, nodemask, gfp_mask); > + folio = alloc_hugetlb_folio_nodemask(h, node, nodemask, gfp_mask); > mpol_cond_put(mpol); > > - return page; > + return &folio->page;
Is it possible that folio could be NULL here and cause addressing exception?
> diff --git a/mm/migrate.c b/mm/migrate.c > index 6932b3d5a9dd..fab706b78be1 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1622,6 +1622,7 @@ struct page *alloc_migration_target(struct page *page, unsigned long private) > struct migration_target_control *mtc; > gfp_t gfp_mask; > unsigned int order = 0; > + struct folio *hugetlb_folio = NULL; > struct folio *new_folio = NULL; > int nid; > int zidx; > @@ -1636,7 +1637,9 @@ struct page *alloc_migration_target(struct page *page, unsigned long private) > 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); > + hugetlb_folio = alloc_hugetlb_folio_nodemask(h, nid, > + mtc->nmask, gfp_mask); > + return &hugetlb_folio->page;
and, here as well? -- Mike Kravetz
> } > > if (folio_test_large(folio)) { > -- > 2.39.0 >
| |