Merge branch 'next-cleanup' into for-v3.7
This commit is contained in:
commit
461b6f0d3d
2 changed files with 13 additions and 16 deletions
|
@ -1059,11 +1059,12 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t
|
||||||
if (!pages[i])
|
if (!pages[i])
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (order)
|
if (order) {
|
||||||
split_page(pages[i], order);
|
split_page(pages[i], order);
|
||||||
j = 1 << order;
|
j = 1 << order;
|
||||||
while (--j)
|
while (--j)
|
||||||
pages[i + j] = pages[i] + j;
|
pages[i + j] = pages[i] + j;
|
||||||
|
}
|
||||||
|
|
||||||
__dma_clear_buffer(pages[i], PAGE_SIZE << order);
|
__dma_clear_buffer(pages[i], PAGE_SIZE << order);
|
||||||
i += 1 << order;
|
i += 1 << order;
|
||||||
|
@ -1814,7 +1815,7 @@ int arm_iommu_attach_device(struct device *dev,
|
||||||
dev->archdata.mapping = mapping;
|
dev->archdata.mapping = mapping;
|
||||||
set_dma_ops(dev, &iommu_ops);
|
set_dma_ops(dev, &iommu_ops);
|
||||||
|
|
||||||
pr_info("Attached IOMMU controller to %s device.\n", dev_name(dev));
|
pr_debug("Attached IOMMU controller to %s device.\n", dev_name(dev));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -315,6 +315,7 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count,
|
||||||
{
|
{
|
||||||
unsigned long mask, pfn, pageno, start = 0;
|
unsigned long mask, pfn, pageno, start = 0;
|
||||||
struct cma *cma = dev_get_cma_area(dev);
|
struct cma *cma = dev_get_cma_area(dev);
|
||||||
|
struct page *page = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!cma || !cma->count)
|
if (!cma || !cma->count)
|
||||||
|
@ -336,18 +337,17 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count,
|
||||||
for (;;) {
|
for (;;) {
|
||||||
pageno = bitmap_find_next_zero_area(cma->bitmap, cma->count,
|
pageno = bitmap_find_next_zero_area(cma->bitmap, cma->count,
|
||||||
start, count, mask);
|
start, count, mask);
|
||||||
if (pageno >= cma->count) {
|
if (pageno >= cma->count)
|
||||||
ret = -ENOMEM;
|
break;
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
pfn = cma->base_pfn + pageno;
|
pfn = cma->base_pfn + pageno;
|
||||||
ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA);
|
ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
bitmap_set(cma->bitmap, pageno, count);
|
bitmap_set(cma->bitmap, pageno, count);
|
||||||
|
page = pfn_to_page(pfn);
|
||||||
break;
|
break;
|
||||||
} else if (ret != -EBUSY) {
|
} else if (ret != -EBUSY) {
|
||||||
goto error;
|
break;
|
||||||
}
|
}
|
||||||
pr_debug("%s(): memory range at %p is busy, retrying\n",
|
pr_debug("%s(): memory range at %p is busy, retrying\n",
|
||||||
__func__, pfn_to_page(pfn));
|
__func__, pfn_to_page(pfn));
|
||||||
|
@ -356,12 +356,8 @@ struct page *dma_alloc_from_contiguous(struct device *dev, int count,
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&cma_mutex);
|
mutex_unlock(&cma_mutex);
|
||||||
|
pr_debug("%s(): returned %p\n", __func__, page);
|
||||||
pr_debug("%s(): returned %p\n", __func__, pfn_to_page(pfn));
|
return page;
|
||||||
return pfn_to_page(pfn);
|
|
||||||
error:
|
|
||||||
mutex_unlock(&cma_mutex);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue