]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
dma-direct: optimize page freeing when it is not addressable
authorChen Yu <yu.c.chen@intel.com>
Sat, 31 Aug 2024 11:01:19 +0000 (19:01 +0800)
committerChristoph Hellwig <hch@lst.de>
Wed, 4 Sep 2024 04:08:51 +0000 (07:08 +0300)
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>
kernel/dma/direct.c

index f2ba074a6a5425bce72b41f9db43a5bbe21b8102..5b4e6d3bf7bcca8930877ba078aed4ce26828f06 100644 (file)
@@ -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) &&