Skip to content

Commit f584b68

Browse files
author
Matthew Wilcox (Oracle)
committed
mm: Add vma_alloc_folio()
This wrapper around alloc_pages_vma() calls prep_transhuge_page(), removing the obligation from the caller. This is in the same spirit as __folio_alloc(). Signed-off-by: Matthew Wilcox (Oracle) <[email protected]> Reviewed-by: Zi Yan <[email protected]> Reviewed-by: William Kucharski <[email protected]>
1 parent c185e49 commit f584b68

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

include/linux/gfp.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,9 +613,11 @@ static inline struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
613613
#ifdef CONFIG_NUMA
614614
struct page *alloc_pages(gfp_t gfp, unsigned int order);
615615
struct folio *folio_alloc(gfp_t gfp, unsigned order);
616-
extern struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
616+
struct page *alloc_pages_vma(gfp_t gfp_mask, int order,
617617
struct vm_area_struct *vma, unsigned long addr,
618618
bool hugepage);
619+
struct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma,
620+
unsigned long addr, bool hugepage);
619621
#define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
620622
alloc_pages_vma(gfp_mask, order, vma, addr, true)
621623
#else
@@ -627,8 +629,10 @@ static inline struct folio *folio_alloc(gfp_t gfp, unsigned int order)
627629
{
628630
return __folio_alloc_node(gfp, order, numa_node_id());
629631
}
630-
#define alloc_pages_vma(gfp_mask, order, vma, addr, false)\
632+
#define alloc_pages_vma(gfp_mask, order, vma, addr, hugepage) \
631633
alloc_pages(gfp_mask, order)
634+
#define vma_alloc_folio(gfp, order, vma, addr, hugepage) \
635+
folio_alloc(gfp, order)
632636
#define alloc_hugepage_vma(gfp_mask, vma, addr, order) \
633637
alloc_pages(gfp_mask, order)
634638
#endif

mm/mempolicy.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2227,6 +2227,19 @@ struct page *alloc_pages_vma(gfp_t gfp, int order, struct vm_area_struct *vma,
22272227
}
22282228
EXPORT_SYMBOL(alloc_pages_vma);
22292229

2230+
struct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma,
2231+
unsigned long addr, bool hugepage)
2232+
{
2233+
struct folio *folio;
2234+
2235+
folio = (struct folio *)alloc_pages_vma(gfp, order, vma, addr,
2236+
hugepage);
2237+
if (folio && order > 1)
2238+
prep_transhuge_page(&folio->page);
2239+
2240+
return folio;
2241+
}
2242+
22302243
/**
22312244
* alloc_pages - Allocate pages.
22322245
* @gfp: GFP flags.

0 commit comments

Comments
 (0)