diff options
| author | Michael Bestas <mkbestas@lineageos.org> | 2021-05-31 03:02:33 +0300 |
|---|---|---|
| committer | Michael Bestas <mkbestas@lineageos.org> | 2021-05-31 03:02:33 +0300 |
| commit | a4940e8fb458a45644126d132c2d5b74719df8df (patch) | |
| tree | 2986ae7bdc2a3a7860ada55fc58af14335307956 /drivers/gpu/msm | |
| parent | f3d4e7ef44f14e433312bc0646ea996d8c8756bf (diff) | |
| parent | 2d161983bfa395623fbe0ed43d32732d2cb93d3e (diff) | |
Merge tag 'LA.UM.9.2.r1-03300-SDMxx0.0' of https://source.codeaurora.org/quic/la/kernel/msm-4.4 into lineage-18.1-caf-msm8998
"LA.UM.9.2.r1-03300-SDMxx0.0"
* tag 'LA.UM.9.2.r1-03300-SDMxx0.0' of https://source.codeaurora.org/quic/la/kernel/msm-4.4:
icmp: randomize the global rate limiter
msm: mdss: hdmi: add checksum for HDR infoframe
msm: mdss: hdmi: finetune CEC_REFTIMER:REFTIMER
block: Fix use-after-free in blkdev_get()
msm: ipa: Send actual DL flt rule length to Q6
msm: gsi: Using kzalloc instead of devm_kzalloc
qseecom: Added boundary checks between two subsequent fields
asoc: Add check to handle negative value passed for num_app_cfg_type
msm: kgsl: Access map_count only if entry is successfully allocated
dm verity: skip verity work on I/O errors when system is shutting down
msm: kgsl: Disable all yield packets for secure contexts
ANDROID: xt_qtaguid: Remove tag_entry from process list on untag
fs/binfmt_elf.c: allocate initialized memory in fill_thread_core_info()
msm: kgsl: Deregister gpu address on memdesc_sg_virt failure
Change-Id: I7e3b6f292b960a17501f52ce6be8aace8f1ab012
Diffstat (limited to 'drivers/gpu/msm')
| -rw-r--r-- | drivers/gpu/msm/adreno_a5xx_preempt.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/msm/kgsl.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/msm/kgsl_mmu.c | 3 |
3 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/msm/adreno_a5xx_preempt.c b/drivers/gpu/msm/adreno_a5xx_preempt.c index 883a9810fbf4..d1b55c9e9023 100644 --- a/drivers/gpu/msm/adreno_a5xx_preempt.c +++ b/drivers/gpu/msm/adreno_a5xx_preempt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2017,2021, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -407,7 +407,8 @@ unsigned int a5xx_preemption_pre_ibsubmit( /* Enable CP_CONTEXT_SWITCH_YIELD packets in the IB2s */ *cmds++ = cp_type7_packet(CP_YIELD_ENABLE, 1); - *cmds++ = 2; + *cmds++ = ((preempt_style == KGSL_CONTEXT_PREEMPT_STYLE_RINGBUFFER) + ? 0 : 2); return (unsigned int) (cmds - cmds_orig); } diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 2170a329d5bf..bda0afed50b6 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -265,8 +265,9 @@ kgsl_mem_entry_create(void) /* put this ref in the caller functions after init */ kref_get(&entry->refcount); + atomic_set(&entry->map_count, 0); } - atomic_set(&entry->map_count, 0); + return entry; } #ifdef CONFIG_DMA_SHARED_BUFFER @@ -2200,6 +2201,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; @@ -2209,7 +2212,6 @@ static int kgsl_setup_anon_useraddr(struct kgsl_pagetable *pagetable, entry->memdesc.flags |= 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, @@ -2221,7 +2223,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; } static int match_file(const void *p, struct file *file, unsigned int fd) diff --git a/drivers/gpu/msm/kgsl_mmu.c b/drivers/gpu/msm/kgsl_mmu.c index 2303e8ee0721..d0a45e713d0d 100644 --- a/drivers/gpu/msm/kgsl_mmu.c +++ b/drivers/gpu/msm/kgsl_mmu.c @@ -432,7 +432,8 @@ 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); /* |
