diff options
author | Michal Nazarewicz <mina86@mina86.com> | 2012-09-05 01:50:41 -0400 |
---|---|---|
committer | Marek Szyprowski <m.szyprowski@samsung.com> | 2012-10-02 02:57:45 -0400 |
commit | bdd43cb39f1b1e897c5d7992d05d0b9f0dd786d1 (patch) | |
tree | eec00a15f43da4bb55510a6d1542c038a877637e /drivers/base/dma-contiguous.c | |
parent | a0d271cbfed1dd50278c6b06bead3d00ba0a88f9 (diff) |
drivers: dma-contiguous: refactor dma_alloc_from_contiguous()
The dma_alloc_from_contiguous() function returns either a valid pointer
to a page structure or NULL, the error code set when pageno >= cma->count
is not used at all and can be safely removed.
This commit also changes the function to avoid goto and have only one exit
path and one place where mutex is unlocked.
Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
[fixed compilation break caused by missing semicolon]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Diffstat (limited to 'drivers/base/dma-contiguous.c')
-rw-r--r-- | drivers/base/dma-contiguous.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c index 34d94c762a1e..9a1469474f55 100644 --- a/drivers/base/dma-contiguous.c +++ b/drivers/base/dma-contiguous.c | |||
@@ -315,6 +315,7 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count, | |||
315 | { | 315 | { |
316 | unsigned long mask, pfn, pageno, start = 0; | 316 | unsigned long mask, pfn, pageno, start = 0; |
317 | struct cma *cma = dev_get_cma_area(dev); | 317 | struct cma *cma = dev_get_cma_area(dev); |
318 | struct page *page = NULL; | ||
318 | int ret; | 319 | int ret; |
319 | 320 | ||
320 | if (!cma || !cma->count) | 321 | if (!cma || !cma->count) |
@@ -336,18 +337,17 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count, | |||
336 | for (;;) { | 337 | for (;;) { |
337 | pageno = bitmap_find_next_zero_area(cma->bitmap, cma->count, | 338 | pageno = bitmap_find_next_zero_area(cma->bitmap, cma->count, |
338 | start, count, mask); | 339 | start, count, mask); |
339 | if (pageno >= cma->count) { | 340 | if (pageno >= cma->count) |
340 | ret = -ENOMEM; | 341 | break; |
341 | goto error; | ||
342 | } | ||
343 | 342 | ||
344 | pfn = cma->base_pfn + pageno; | 343 | pfn = cma->base_pfn + pageno; |
345 | ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA); | 344 | ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA); |
346 | if (ret == 0) { | 345 | if (ret == 0) { |
347 | bitmap_set(cma->bitmap, pageno, count); | 346 | bitmap_set(cma->bitmap, pageno, count); |
347 | page = pfn_to_page(pfn); | ||
348 | break; | 348 | break; |
349 | } else if (ret != -EBUSY) { | 349 | } else if (ret != -EBUSY) { |
350 | goto error; | 350 | break; |
351 | } | 351 | } |
352 | pr_debug("%s(): memory range at %p is busy, retrying\n", | 352 | pr_debug("%s(): memory range at %p is busy, retrying\n", |
353 | __func__, pfn_to_page(pfn)); | 353 | __func__, pfn_to_page(pfn)); |
@@ -356,12 +356,8 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count, | |||
356 | } | 356 | } |
357 | 357 | ||
358 | mutex_unlock(&cma_mutex); | 358 | mutex_unlock(&cma_mutex); |
359 | 359 | pr_debug("%s(): returned %p\n", __func__, page); | |
360 | pr_debug("%s(): returned %p\n", __func__, pfn_to_page(pfn)); | 360 | return page; |
361 | return pfn_to_page(pfn); | ||
362 | error: | ||
363 | mutex_unlock(&cma_mutex); | ||
364 | return NULL; | ||
365 | } | 361 | } |
366 | 362 | ||
367 | /** | 363 | /** |