summaryrefslogtreecommitdiff
path: root/include/linux/cma.h
diff options
context:
space:
mode:
authorYu Zhao <yuzhao@google.com>2024-08-13 21:54:50 -0600
committerAndrew Morton <akpm@linux-foundation.org>2024-09-03 21:15:36 -0700
commit463586e9ff398f951a9a63d98a3b93f44434d20c (patch)
treeddaacb6643ffc9156b6e46fb7684b3fb6ada2a9f /include/linux/cma.h
parente98337d11bbdfa3e3f0fb99aa93e40f97549e0cd (diff)
downloadlwn-463586e9ff398f951a9a63d98a3b93f44434d20c.tar.gz
lwn-463586e9ff398f951a9a63d98a3b93f44434d20c.zip
mm/cma: add cma_{alloc,free}_folio()
With alloc_contig_range() and free_contig_range() supporting large folios, CMA can allocate and free large folios too, by cma_alloc_folio() and cma_free_folio(). [yuzhao@google.com: fix WARN in cma_alloc_folio()] Link: https://lkml.kernel.org/r/Zsd0PgAQmbpR8jS6@google.com Link: https://lkml.kernel.org/r/20240814035451.773331-3-yuzhao@google.com Signed-off-by: Yu Zhao <yuzhao@google.com> Acked-by: Zi Yan <ziy@nvidia.com> Cc: Frank van der Linden <fvdl@google.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Muchun Song <muchun.song@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'include/linux/cma.h')
-rw-r--r--include/linux/cma.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/cma.h b/include/linux/cma.h
index 9db877506ea8..d15b64f51336 100644
--- a/include/linux/cma.h
+++ b/include/linux/cma.h
@@ -52,4 +52,20 @@ extern bool cma_release(struct cma *cma, const struct page *pages, unsigned long
extern int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data);
extern void cma_reserve_pages_on_error(struct cma *cma);
+
+#ifdef CONFIG_CMA
+struct folio *cma_alloc_folio(struct cma *cma, int order, gfp_t gfp);
+bool cma_free_folio(struct cma *cma, const struct folio *folio);
+#else
+static inline struct folio *cma_alloc_folio(struct cma *cma, int order, gfp_t gfp)
+{
+ return NULL;
+}
+
+static inline bool cma_free_folio(struct cma *cma, const struct folio *folio)
+{
+ return false;
+}
+#endif
+
#endif