diff options
author | Chen Yu <yu.c.chen@intel.com> | 2024-08-31 19:01:19 +0800 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2024-09-04 07:08:51 +0300 |
commit | f689a3ab7b8ece9e5787ff058b96b8630e4931ad (patch) | |
tree | 2b43efba199ad12f3b52db8263dfa22ec807f724 /kernel/dma | |
parent | de6c85bf918ea52d5c680f0d130b37ee2ff152d6 (diff) |
dma-direct: optimize page freeing when it is not addressable
When the CMA allocation succeeds but isn't addressable, its buffer has
already been released and the page is set to NULL. So later when the
normal page allocation succeeds but isn't addressable, __free_pages()
can be used to free that normal page rather than using
dma_free_contiguous that does extra checks that are not needed.
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'kernel/dma')
-rw-r--r-- | kernel/dma/direct.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index f2ba074a6a54..5b4e6d3bf7bc 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -140,7 +140,7 @@ again: if (!page) page = alloc_pages_node(node, gfp, get_order(size)); if (page && !dma_coherent_ok(dev, page_to_phys(page), size)) { - dma_free_contiguous(dev, page, size); + __free_pages(page, get_order(size)); page = NULL; if (IS_ENABLED(CONFIG_ZONE_DMA32) && |