mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
msm: kgsl: Deregister gpu address on memdesc_sg_virt failure
When memdesc_sg_virt returns error in kgsl_setup_anon_useraddr function, the gpu address registered in SVM region will not be deregistered. This change deregisters the gpu address on memdesc_sg_virt failure. Change-Id: Ic99167e283a0c6331bb9f5f0b608b6cdb3c918e4 Signed-off-by: Neeraja P <neerp@codeaurora.org>
This commit is contained in:
parent
4afb66961f
commit
9d5f8de63c
2 changed files with 11 additions and 5 deletions
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2008-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2008-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <uapi/linux/sched/types.h>
|
||||
|
|
@ -2451,6 +2451,8 @@ static int kgsl_setup_anon_useraddr(struct kgsl_pagetable *pagetable,
|
|||
{
|
||||
/* Map an anonymous memory chunk */
|
||||
|
||||
int ret;
|
||||
|
||||
if (size == 0 || offset != 0 ||
|
||||
!IS_ALIGNED(size, PAGE_SIZE))
|
||||
return -EINVAL;
|
||||
|
|
@ -2460,7 +2462,6 @@ static int kgsl_setup_anon_useraddr(struct kgsl_pagetable *pagetable,
|
|||
entry->memdesc.flags |= (uint64_t)KGSL_MEMFLAGS_USERMEM_ADDR;
|
||||
|
||||
if (kgsl_memdesc_use_cpu_map(&entry->memdesc)) {
|
||||
int ret;
|
||||
|
||||
/* Register the address in the database */
|
||||
ret = kgsl_mmu_set_svm_region(pagetable,
|
||||
|
|
@ -2472,7 +2473,12 @@ static int kgsl_setup_anon_useraddr(struct kgsl_pagetable *pagetable,
|
|||
entry->memdesc.gpuaddr = (uint64_t) hostptr;
|
||||
}
|
||||
|
||||
return memdesc_sg_virt(&entry->memdesc, hostptr);
|
||||
ret = memdesc_sg_virt(&entry->memdesc, hostptr);
|
||||
|
||||
if (ret && kgsl_memdesc_use_cpu_map(&entry->memdesc))
|
||||
kgsl_mmu_put_gpuaddr(&entry->memdesc);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DMA_SHARED_BUFFER
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2002,2007-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2002,2007-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
|
|
@ -398,7 +398,7 @@ void kgsl_mmu_put_gpuaddr(struct kgsl_memdesc *memdesc)
|
|||
if (memdesc->size == 0 || memdesc->gpuaddr == 0)
|
||||
return;
|
||||
|
||||
if (!kgsl_memdesc_is_global(memdesc))
|
||||
if (!kgsl_memdesc_is_global(memdesc) && (KGSL_MEMDESC_MAPPED & memdesc->priv))
|
||||
unmap_fail = kgsl_mmu_unmap(pagetable, memdesc);
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue