|
@@ -315,6 +315,7 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
|
|
|
struct ion_buffer *buffer = dmabuf->priv;
|
|
|
void *vaddr;
|
|
|
struct ion_dma_buf_attachment *a;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
/*
|
|
|
* TODO: Move this elsewhere because we don't always need a vaddr
|
|
@@ -322,6 +323,10 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
|
|
|
if (buffer->heap->ops->map_kernel) {
|
|
|
mutex_lock(&buffer->lock);
|
|
|
vaddr = ion_buffer_kmap_get(buffer);
|
|
|
+ if (IS_ERR(vaddr)) {
|
|
|
+ ret = PTR_ERR(vaddr);
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
mutex_unlock(&buffer->lock);
|
|
|
}
|
|
|
|
|
@@ -330,9 +335,10 @@ static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
|
|
|
dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
|
|
|
direction);
|
|
|
}
|
|
|
- mutex_unlock(&buffer->lock);
|
|
|
|
|
|
- return 0;
|
|
|
+unlock:
|
|
|
+ mutex_unlock(&buffer->lock);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
|