diff options
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.c | 44 |
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 /* |