diff options
author | Christoph Hellwig <hch@lst.de> | 2020-02-21 12:26:00 -0800 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2020-03-16 10:48:06 +0100 |
commit | 3d0fc341c4bb66b2c41c0d1ec954a6d300e100b7 (patch) | |
tree | dec1544e023a1c82d0090d5200c1b04e51e34588 /kernel/dma/direct.c | |
parent | 4f8232bbf887123f78bcdca3dfd2b3dfa52a0112 (diff) | |
download | lwn-3d0fc341c4bb66b2c41c0d1ec954a6d300e100b7.tar.gz lwn-3d0fc341c4bb66b2c41c0d1ec954a6d300e100b7.zip |
dma-direct: consolidate the error handling in dma_direct_alloc_pages
Use a goto label to merge two error return cases.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Diffstat (limited to 'kernel/dma/direct.c')
-rw-r--r-- | kernel/dma/direct.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 6af7ae83c4ad..650580fbbff3 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -169,11 +169,8 @@ void *dma_direct_alloc_pages(struct device *dev, size_t size, ret = dma_common_contiguous_remap(page, PAGE_ALIGN(size), dma_pgprot(dev, PAGE_KERNEL, attrs), __builtin_return_address(0)); - if (!ret) { - dma_free_contiguous(dev, page, size); - return ret; - } - + if (!ret) + goto out_free_pages; memset(ret, 0, size); goto done; } @@ -186,8 +183,7 @@ void *dma_direct_alloc_pages(struct device *dev, size_t size, * so log an error and fail. */ dev_info(dev, "Rejecting highmem page from CMA.\n"); - dma_free_contiguous(dev, page, size); - return NULL; + goto out_free_pages; } ret = page_address(page); @@ -207,6 +203,9 @@ done: else *dma_handle = phys_to_dma(dev, page_to_phys(page)); return ret; +out_free_pages: + dma_free_contiguous(dev, page, size); + return NULL; } void dma_direct_free_pages(struct device *dev, size_t size, void *cpu_addr, |