summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLynus Vaz <quic_lvaz@quicinc.com>2023-12-20 13:52:55 -0800
committerRaviteja Narayanam <quic_ravnar@quicinc.com>2024-03-12 12:04:33 +0530
commit68986d764b2435b494b94ed7e8a6abea6f90f2c4 (patch)
tree5b4b0854380b961b3642af0868d561e13192ef99
parentb265eab03adfc6c0d1e078a80af29af69735d847 (diff)
msm: kgsl: Do not release dma and anon buffers if unmap fails
If iommu unmap fails and leaves dma or anon buffers still mapped in the iommu, do not free them. Change-Id: Ice0e1a59c1ac0ee7a9d62d8899966b84fa63d5ca Signed-off-by: Lynus Vaz <quic_lvaz@quicinc.com>
-rw-r--r--drivers/gpu/msm/kgsl.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index bc0a9fd27e5b..d68cafad86ee 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -277,6 +277,9 @@ static void kgsl_destroy_ion(struct kgsl_memdesc *memdesc)
struct kgsl_mem_entry, memdesc);
struct kgsl_dma_buf_meta *meta = entry->priv_data;
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
if (meta != NULL) {
dma_buf_unmap_attachment(meta->attach, meta->table,
DMA_FROM_DEVICE);
@@ -304,6 +307,9 @@ static void kgsl_destroy_anon(struct kgsl_memdesc *memdesc)
struct scatterlist *sg;
struct page *page;
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
for_each_sg(memdesc->sgt->sgl, sg, memdesc->sgt->nents, i) {
page = sg_page(sg);
for (j = 0; j < (sg->length >> PAGE_SHIFT); j++) {