summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorQingfang Deng <qingfang.deng@linux.dev>2026-09-03 09:29:13 +0800
committerMarek Szyprowski <m.szyprowski@samsung.com>2026-09-07 18:55:12 +0200
commit641a9b9cc697eb6ea375a25aafc6884d1b485612 (patch)
tree48c6690c9f52d1bb22443991d3399c4f67a2acbd /include/linux
parent95d2fec40c483d8a63e5ffa0fa88faeb2e0ed462 (diff)
downloadlinux-next-641a9b9cc697eb6ea375a25aafc6884d1b485612.tar.gz
linux-next-641a9b9cc697eb6ea375a25aafc6884d1b485612.zip
dma-mapping: use exact allocation for DMA pages
DMA page allocation fallbacks use alloc_pages_node() with get_order(size), wasting the unused tail for non-power-of-two requests. Use alloc_pages_exact_nid() and free_pages_exact() so that a buddy fallback retains only requested pages. Signed-off-by: Qingfang Deng <qingfang.deng@linux.dev> Link: https://lore.kernel.org/r/20260903012914.312305-1-qingfang.deng@linux.dev Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dma-map-ops.h2
-rw-r--r--include/linux/gfp.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index eee6de5188c7..afaf2c12189b 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -143,7 +143,7 @@ static inline struct page *dma_alloc_contiguous(struct device *dev, size_t size,
static inline void dma_free_contiguous(struct device *dev, struct page *page,
size_t size)
{
- __free_pages(page, get_order(size));
+ free_pages_exact(page_address(page), size);
}
#endif /* CONFIG_DMA_CMA*/
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 872bc53f32ec..aa4601805f21 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -329,7 +329,7 @@ void *alloc_pages_exact_noprof(size_t size, gfp_t gfp_mask) __alloc_size(1);
void free_pages_exact(void *virt, size_t size);
-__meminit void *alloc_pages_exact_nid_noprof(int nid, size_t size, gfp_t gfp_mask) __alloc_size(2);
+void *alloc_pages_exact_nid_noprof(int nid, size_t size, gfp_t gfp_mask) __alloc_size(2);
#define alloc_pages_exact_nid(...) \
alloc_hooks(alloc_pages_exact_nid_noprof(__VA_ARGS__))