summaryrefslogtreecommitdiff
path: root/mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c')
-rw-r--r--mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c b/mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c
index 66b671d..d783650 100644
--- a/mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c
+++ b/mali_kbase/csf/mali_kbase_csf_cpu_queue_debugfs.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
/*
*
- * (C) COPYRIGHT 2020-2021 ARM Limited. All rights reserved.
+ * (C) COPYRIGHT 2020-2023 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the
* GNU General Public License version 2 as published by the Free Software
@@ -51,18 +51,18 @@ static int kbasep_csf_cpu_queue_debugfs_show(struct seq_file *file, void *data)
{
struct kbase_context *kctx = file->private;
- mutex_lock(&kctx->csf.lock);
+ rt_mutex_lock(&kctx->csf.lock);
if (atomic_read(&kctx->csf.cpu_queue.dump_req_status) !=
BASE_CSF_CPU_QUEUE_DUMP_COMPLETE) {
seq_puts(file, "Dump request already started! (try again)\n");
- mutex_unlock(&kctx->csf.lock);
+ rt_mutex_unlock(&kctx->csf.lock);
return -EBUSY;
}
atomic_set(&kctx->csf.cpu_queue.dump_req_status, BASE_CSF_CPU_QUEUE_DUMP_ISSUED);
init_completion(&kctx->csf.cpu_queue.dump_cmp);
kbase_event_wakeup_nosync(kctx);
- mutex_unlock(&kctx->csf.lock);
+ rt_mutex_unlock(&kctx->csf.lock);
seq_puts(file,
"CPU Queues table (version:v" __stringify(MALI_CSF_CPU_QUEUE_DEBUGFS_VERSION) "):\n");
@@ -70,7 +70,7 @@ static int kbasep_csf_cpu_queue_debugfs_show(struct seq_file *file, void *data)
wait_for_completion_timeout(&kctx->csf.cpu_queue.dump_cmp,
msecs_to_jiffies(3000));
- mutex_lock(&kctx->csf.lock);
+ rt_mutex_lock(&kctx->csf.lock);
if (kctx->csf.cpu_queue.buffer) {
WARN_ON(atomic_read(&kctx->csf.cpu_queue.dump_req_status) !=
BASE_CSF_CPU_QUEUE_DUMP_PENDING);
@@ -86,7 +86,7 @@ static int kbasep_csf_cpu_queue_debugfs_show(struct seq_file *file, void *data)
atomic_set(&kctx->csf.cpu_queue.dump_req_status,
BASE_CSF_CPU_QUEUE_DUMP_COMPLETE);
- mutex_unlock(&kctx->csf.lock);
+ rt_mutex_unlock(&kctx->csf.lock);
return 0;
}
@@ -126,33 +126,30 @@ void kbase_csf_cpu_queue_debugfs_init(struct kbase_context *kctx)
int kbase_csf_cpu_queue_dump(struct kbase_context *kctx,
u64 buffer, size_t buf_size)
{
- int err = 0;
-
size_t alloc_size = buf_size;
char *dump_buffer;
if (!buffer || !alloc_size)
- goto done;
+ return 0;
+
+ if (alloc_size > SIZE_MAX - PAGE_SIZE)
+ return -ENOMEM;
alloc_size = (alloc_size + PAGE_SIZE) & ~(PAGE_SIZE - 1);
dump_buffer = kzalloc(alloc_size, GFP_KERNEL);
- if (ZERO_OR_NULL_PTR(dump_buffer)) {
- err = -ENOMEM;
- goto done;
- }
+ if (!dump_buffer)
+ return -ENOMEM;
WARN_ON(kctx->csf.cpu_queue.buffer != NULL);
- err = copy_from_user(dump_buffer,
+ if (copy_from_user(dump_buffer,
u64_to_user_ptr(buffer),
- buf_size);
- if (err) {
+ buf_size)) {
kfree(dump_buffer);
- err = -EFAULT;
- goto done;
+ return -EFAULT;
}
- mutex_lock(&kctx->csf.lock);
+ rt_mutex_lock(&kctx->csf.lock);
kfree(kctx->csf.cpu_queue.buffer);
@@ -161,13 +158,12 @@ int kbase_csf_cpu_queue_dump(struct kbase_context *kctx,
kctx->csf.cpu_queue.buffer = dump_buffer;
kctx->csf.cpu_queue.buffer_size = buf_size;
complete_all(&kctx->csf.cpu_queue.dump_cmp);
- } else {
+ } else
kfree(dump_buffer);
- }
- mutex_unlock(&kctx->csf.lock);
-done:
- return err;
+ rt_mutex_unlock(&kctx->csf.lock);
+
+ return 0;
}
#else
/*