summaryrefslogtreecommitdiff
path: root/mali_kbase
diff options
context:
space:
mode:
authorSuzanne Candanedo <suzanne.candanedo@arm.com>2023-04-12 12:09:55 +0100
committerGuus Sliepen <gsliepen@google.com>2023-04-21 16:22:03 +0000
commitb2006a9bbee737e9e6c0277deb670f63f2b90a2a (patch)
tree57dff400a22993e9418713b8c1b588be7ceb7ae5 /mali_kbase
parent2c7d5db9265246160df5e7731786174613c43975 (diff)
downloadgpu-b2006a9bbee737e9e6c0277deb670f63f2b90a2a.tar.gz
[Official] MIDCET-4458, GPUCORE-36635 Fix memory leak via GROUP_SUSPEND
Userspace can cause a memory leak for physical pages of SAME_VA allocations through GROUP_SUSPEND kcpu command. This commit fixes the memleak issue Bug: 275620394 Provenance: https://code.ipdelivery.arm.com/c/GPU/mali-ddk/+/5167 Change-Id: Iec155e23ea135cf1ea7592f38934dc617cc6b10e (cherry picked from commit 1f565b867e7bff3b3307db0960fabf028f95d981)
Diffstat (limited to 'mali_kbase')
-rw-r--r--mali_kbase/csf/mali_kbase_csf_kcpu.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/mali_kbase/csf/mali_kbase_csf_kcpu.c b/mali_kbase/csf/mali_kbase_csf_kcpu.c
index 6c034f0..24fc969 100644
--- a/mali_kbase/csf/mali_kbase_csf_kcpu.c
+++ b/mali_kbase/csf/mali_kbase_csf_kcpu.c
@@ -2002,7 +2002,7 @@ static void kcpu_queue_process(struct kbase_kcpu_command_queue *queue,
break;
}
- case BASE_KCPU_COMMAND_TYPE_JIT_FREE:
+ case BASE_KCPU_COMMAND_TYPE_JIT_FREE: {
KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_FREE_START(kbdev, queue);
status = kbase_kcpu_jit_free_process(queue, cmd);
@@ -2012,6 +2012,7 @@ static void kcpu_queue_process(struct kbase_kcpu_command_queue *queue,
KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_FREE_END(
kbdev, queue);
break;
+ }
case BASE_KCPU_COMMAND_TYPE_GROUP_SUSPEND: {
struct kbase_suspend_copy_buffer *sus_buf =
cmd->info.suspend_buf_copy.sus_buf;
@@ -2028,18 +2029,18 @@ static void kcpu_queue_process(struct kbase_kcpu_command_queue *queue,
KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_END(
kbdev, queue, status);
+ }
- if (!sus_buf->cpu_alloc) {
- int i;
+ if (!sus_buf->cpu_alloc) {
+ int i;
- for (i = 0; i < sus_buf->nr_pages; i++)
- put_page(sus_buf->pages[i]);
- } else {
- kbase_mem_phy_alloc_kernel_unmapped(
- sus_buf->cpu_alloc);
- kbase_mem_phy_alloc_put(
- sus_buf->cpu_alloc);
- }
+ for (i = 0; i < sus_buf->nr_pages; i++)
+ put_page(sus_buf->pages[i]);
+ } else {
+ kbase_mem_phy_alloc_kernel_unmapped(
+ sus_buf->cpu_alloc);
+ kbase_mem_phy_alloc_put(
+ sus_buf->cpu_alloc);
}
kfree(sus_buf->pages);