summaryrefslogtreecommitdiff
path: root/drivers/gpu/msm
diff options
context:
space:
mode:
authorMichael Bestas <mkbestas@lineageos.org>2021-05-31 03:02:33 +0300
committerMichael Bestas <mkbestas@lineageos.org>2021-05-31 03:02:33 +0300
commita4940e8fb458a45644126d132c2d5b74719df8df (patch)
tree2986ae7bdc2a3a7860ada55fc58af14335307956 /drivers/gpu/msm
parentf3d4e7ef44f14e433312bc0646ea996d8c8756bf (diff)
parent2d161983bfa395623fbe0ed43d32732d2cb93d3e (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.c5
-rw-r--r--drivers/gpu/msm/kgsl.c13
-rw-r--r--drivers/gpu/msm/kgsl_mmu.c3
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);
/*