aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/dma-contiguous.c18
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);
362error:
363 mutex_unlock(&cma_mutex);
364 return NULL;
365} 361}
366 362
367/** 363/**