staging: ion: fix common struct sg_table related issues
[platform/kernel/linux-starfive.git] / drivers / staging / android / ion / ion.c
index 38b51ea..3c9f095 100644 (file)
@@ -147,14 +147,14 @@ static struct sg_table *dup_sg_table(struct sg_table *table)
        if (!new_table)
                return ERR_PTR(-ENOMEM);
 
-       ret = sg_alloc_table(new_table, table->nents, GFP_KERNEL);
+       ret = sg_alloc_table(new_table, table->orig_nents, GFP_KERNEL);
        if (ret) {
                kfree(new_table);
                return ERR_PTR(-ENOMEM);
        }
 
        new_sg = new_table->sgl;
-       for_each_sg(table->sgl, sg, table->nents, i) {
+       for_each_sgtable_sg(table, sg, i) {
                memcpy(new_sg, sg, sizeof(*sg));
                new_sg->dma_address = 0;
                new_sg = sg_next(new_sg);
@@ -224,12 +224,13 @@ static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
 {
        struct ion_dma_buf_attachment *a = attachment->priv;
        struct sg_table *table;
+       int ret;
 
        table = a->table;
 
-       if (!dma_map_sg(attachment->dev, table->sgl, table->nents,
-                       direction))
-               return ERR_PTR(-ENOMEM);
+       ret = dma_map_sgtable(attachment->dev, table, direction, 0);
+       if (ret)
+               return ERR_PTR(ret);
 
        return table;
 }
@@ -238,7 +239,7 @@ static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
                              struct sg_table *table,
                              enum dma_data_direction direction)
 {
-       dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction);
+       dma_unmap_sgtable(attachment->dev, table, direction, 0);
 }
 
 static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
@@ -296,10 +297,8 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
        }
 
        mutex_lock(&buffer->lock);
-       list_for_each_entry(a, &buffer->attachments, list) {
-               dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
-                                   direction);
-       }
+       list_for_each_entry(a, &buffer->attachments, list)
+               dma_sync_sgtable_for_cpu(a->dev, a->table, direction);
 
 unlock:
        mutex_unlock(&buffer->lock);
@@ -319,10 +318,8 @@ static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
        }
 
        mutex_lock(&buffer->lock);
-       list_for_each_entry(a, &buffer->attachments, list) {
-               dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents,
-                                      direction);
-       }
+       list_for_each_entry(a, &buffer->attachments, list)
+               dma_sync_sgtable_for_device(a->dev, a->table, direction);
        mutex_unlock(&buffer->lock);
 
        return 0;