summaryrefslogtreecommitdiff
path: root/mali_kbase/backend
diff options
context:
space:
mode:
authorkirdev01 <kiran.devrajegowda@arm.com>2023-05-05 14:20:35 +0200
committerGuus Sliepen <gsliepen@google.com>2023-05-30 15:52:15 +0000
commit742b99a55c83b81619437f28bc4dee4702a5c768 (patch)
treef813c7960ce51c3c30b71aba2b35b5c252298241 /mali_kbase/backend
parent37584753704e12d68043af1abd7e9c33c919c29b (diff)
downloadgpu-742b99a55c83b81619437f28bc4dee4702a5c768.tar.gz
GPUCORE-37961 Deadlock issue due to lock ordering issue
This patch addresses the dead lock condition due to circular locking dependency between hwaccess_lock and clk_rtm->lock.Hwaccess_lock needs to be taken before clk_rtm->lock to avoid locking dependency. Change-Id: I1064dbbac7800282bf3a1ac167c9c476177aefd8 (cherry picked from commit e0dfe9669c3456ada4b860f6ba9859c59ffec9a7) Bug: 274687461 Provenance: https://code.ipdelivery.arm.com/c/GPU/mali-ddk/+/5258
Diffstat (limited to 'mali_kbase/backend')
-rw-r--r--mali_kbase/backend/gpu/mali_kbase_clk_rate_trace_mgr.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/mali_kbase/backend/gpu/mali_kbase_clk_rate_trace_mgr.c b/mali_kbase/backend/gpu/mali_kbase_clk_rate_trace_mgr.c
index ddd03ca..8d09347 100644
--- a/mali_kbase/backend/gpu/mali_kbase_clk_rate_trace_mgr.c
+++ b/mali_kbase/backend/gpu/mali_kbase_clk_rate_trace_mgr.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
/*
*
- * (C) COPYRIGHT 2020-2022 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
@@ -241,7 +241,8 @@ void kbase_clk_rate_trace_manager_gpu_active(struct kbase_device *kbdev)
if (!clk_rtm->clk_rate_trace_ops)
return;
- spin_lock_irqsave(&clk_rtm->lock, flags);
+ spin_lock_irqsave(&kbdev->hwaccess_lock, flags);
+ spin_lock(&clk_rtm->lock);
for (i = 0; i < BASE_MAX_NR_CLOCKS_REGULATORS; i++) {
struct kbase_clk_data *clk_data = clk_rtm->clks[i];
@@ -257,7 +258,8 @@ void kbase_clk_rate_trace_manager_gpu_active(struct kbase_device *kbdev)
}
clk_rtm->gpu_idle = false;
- spin_unlock_irqrestore(&clk_rtm->lock, flags);
+ spin_unlock(&clk_rtm->lock);
+ spin_unlock_irqrestore(&kbdev->hwaccess_lock, flags);
}
void kbase_clk_rate_trace_manager_gpu_idle(struct kbase_device *kbdev)