diff options
Diffstat (limited to 'drivers/base')
-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 | /** |