diff options
author | Kaushal Sanadhya <quic_ksanadhy@quicinc.com> | 2023-11-29 11:39:06 +0530 |
---|---|---|
committer | Michael Stokes <mjstokes@google.com> | 2024-02-14 09:17:54 +0000 |
commit | 4ac1a9e2136c46e03cc0f79f26c9d8188d6f6f49 (patch) | |
tree | fc0a0c3bac6211095fa67fcd102cde3c39dd81cf | |
parent | c2f38c3db1723ff6ff98b5866a89df184cfbe0ca (diff) | |
download | msm-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.c | 4 | ||||
-rw-r--r-- | drivers/gpu/msm/kgsl_sharedmem.c | 8 |
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, |