summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaushal Sanadhya <quic_ksanadhy@quicinc.com>2023-11-29 11:39:06 +0530
committerMichael Stokes <mjstokes@google.com>2024-02-14 09:17:54 +0000
commit4ac1a9e2136c46e03cc0f79f26c9d8188d6f6f49 (patch)
treefc0a0c3bac6211095fa67fcd102cde3c39dd81cf
parentc2f38c3db1723ff6ff98b5866a89df184cfbe0ca (diff)
downloadmsm-android-msm-redbull-4.19-android14-qpr2.tar.gz
msm: kgsl: Do not free sharedmem if it cannot be unmappedandroid-14.0.0_r0.78android-msm-redbull-4.19-android14-qpr2
If sharedmem cannot be unmapped from the mmu, it can still be accessed by the GPU. Therefore it is not safe to free the backing memory. In the case that unmap fails, do not free it or return it to the system. Change-Id: Iad3e86d043f129a4d71cf862865d9033d4a315e3 Signed-off-by: Lynus Vaz <quic_lvaz@quicinc.com> Signed-off-by: Kaushal Sanadhya <quic_ksanadhy@quicinc.com> Provenance: https://git.codelinaro.org/clo/la/kernel/msm-4.19/-/commit/88bb532b430d4fc7a549d4f05643fa149ffda5e3 Bug: 318393843
-rw-r--r--drivers/gpu/msm/kgsl_mmu.c4
-rw-r--r--drivers/gpu/msm/kgsl_sharedmem.c8
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/msm/kgsl_mmu.c b/drivers/gpu/msm/kgsl_mmu.c
index 03ddeab28e87..c7f63ae95f08 100644
--- a/drivers/gpu/msm/kgsl_mmu.c
+++ b/drivers/gpu/msm/kgsl_mmu.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2002,2007-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/slab.h>
@@ -516,6 +516,8 @@ kgsl_mmu_unmap(struct kgsl_pagetable *pagetable,
size = kgsl_memdesc_footprint(memdesc);
ret = pagetable->pt_ops->mmu_unmap(pagetable, memdesc);
+ if (ret)
+ return ret;
atomic_dec(&pagetable->stats.entries);
atomic_long_sub(size, &pagetable->stats.mapped);
diff --git a/drivers/gpu/msm/kgsl_sharedmem.c b/drivers/gpu/msm/kgsl_sharedmem.c
index 222bb6cbb8f6..ded71c09b0e8 100644
--- a/drivers/gpu/msm/kgsl_sharedmem.c
+++ b/drivers/gpu/msm/kgsl_sharedmem.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2002,2007-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <asm/cacheflush.h>
@@ -599,6 +599,9 @@ static int kgsl_unlock_sgt(struct sg_table *sgt)
static void kgsl_page_alloc_free(struct kgsl_memdesc *memdesc)
{
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
kgsl_page_alloc_unmap_kernel(memdesc);
/* we certainly do not expect the hostptr to still be mapped */
BUG_ON(memdesc->hostptr);
@@ -699,6 +702,9 @@ static void kgsl_cma_coherent_free(struct kgsl_memdesc *memdesc)
{
unsigned long attrs = 0;
+ if (memdesc->priv & KGSL_MEMDESC_MAPPED)
+ return;
+
if (memdesc->hostptr) {
if (memdesc->priv & KGSL_MEMDESC_SECURE) {
atomic_long_sub(memdesc->size,