Messages in this thread | | | Date | Fri, 20 Oct 2017 06:35:44 -0500 (CDT) | From | Christopher Lameter <> | Subject | Re: [PATCH v2 1/2] mm, thp: introduce dedicated transparent huge page allocation interfaces |
| |
On Fri, 20 Oct 2017, changbin.du@intel.com wrote:
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 269b5df..2a960fc 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -501,6 +501,43 @@ void prep_transhuge_page(struct page *page) > set_compound_page_dtor(page, TRANSHUGE_PAGE_DTOR); > } > > +struct page *alloc_transhuge_page_vma(gfp_t gfp_mask, > + struct vm_area_struct *vma, unsigned long addr) > +{ > + struct page *page; > + > + page = alloc_pages_vma(gfp_mask | __GFP_COMP, HPAGE_PMD_ORDER, > + vma, addr, numa_node_id(), true); > + if (unlikely(!page)) > + return NULL; > + prep_transhuge_page(page); > + return page; > +} > + > +struct page *alloc_transhuge_page_nodemask(gfp_t gfp_mask, > + int preferred_nid, nodemask_t *nmask) > +{ > + struct page *page; > + > + page = __alloc_pages_nodemask(gfp_mask | __GFP_COMP, HPAGE_PMD_ORDER, > + preferred_nid, nmask); > + if (unlikely(!page)) > + return NULL; > + prep_transhuge_page(page); > + return page; > +} > + > +struct page *alloc_transhuge_page(gfp_t gfp_mask) > +{ > + struct page *page; > + > + page = alloc_pages(gfp_mask | __GFP_COMP, HPAGE_PMD_ORDER); > + if (unlikely(!page)) > + return NULL; > + prep_transhuge_page(page); > + return page; > +} > +
These look pretty similar to the code used for huge pages (aside from the call to prep_transhuge_page(). Maybe we can have common allocation primitives for huge pages?
| |