Commit acf6b77c authored by Thierry Reding's avatar Thierry Reding

drm/tegra: gem: Use sg_alloc_table_from_pages()

Instead of manually creating the SG table for a discontiguous buffer,
use the existing sg_alloc_table_from_pages(). Note that this is not safe
to be used with the ARM DMA/IOMMU integration code because that will not
ensure that the whole buffer is mapped contiguously. Depending on the
size of the individual entries the mapping may end up containing holes
to ensure alignment.

However, we only ever use these buffers with explicit IOMMU API usage
and know how to avoid these holes.
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 8b5a3c17
...@@ -508,14 +508,9 @@ tegra_gem_prime_map_dma_buf(struct dma_buf_attachment *attach, ...@@ -508,14 +508,9 @@ tegra_gem_prime_map_dma_buf(struct dma_buf_attachment *attach,
return NULL; return NULL;
if (bo->pages) { if (bo->pages) {
struct scatterlist *sg; if (sg_alloc_table_from_pages(sgt, bo->pages, bo->num_pages,
unsigned int i; 0, gem->size, GFP_KERNEL) < 0)
if (sg_alloc_table(sgt, bo->num_pages, GFP_KERNEL))
goto free; goto free;
for_each_sg(sgt->sgl, sg, bo->num_pages, i)
sg_set_page(sg, bo->pages[i], PAGE_SIZE, 0);
} else { } else {
if (dma_get_sgtable(attach->dev, sgt, bo->vaddr, bo->iova, if (dma_get_sgtable(attach->dev, sgt, bo->vaddr, bo->iova,
gem->size) < 0) gem->size) < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment