From: Ge Yang <[email protected]>
The pool allocation path directly returned the void* cpu virtual
address from dma_direct_alloc_from_pool(), which is type‑mismatched
against struct page *. Convert the dma_handle to page via
dma_direct_to_page() instead.
Fixes: 5b138c534fda ("dma-direct: factor out a dma_direct_alloc_from_pool helper")
Signed-off-by: Ge Yang <[email protected]>
Cc: [email protected]
---
kernel/dma/direct.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 4391b79..f496568 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -356,8 +356,12 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
struct page *page;
void *ret;
- if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp))
- return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
+ if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp)) {
+ ret = dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
+ if (!ret)
+ return NULL;
+ return dma_direct_to_page(dev, *dma_handle);
+ }
page = __dma_direct_alloc_pages(dev, size, gfp, false);
if (!page)
--
2.7.4
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.