diff options
author | kirdev01 <kiran.devrajegowda@arm.com> | 2023-05-05 14:20:35 +0200 |
---|---|---|
committer | Guus Sliepen <gsliepen@google.com> | 2023-05-30 15:52:15 +0000 |
commit | 742b99a55c83b81619437f28bc4dee4702a5c768 (patch) | |
tree | f813c7960ce51c3c30b71aba2b35b5c252298241 /mali_kbase/backend | |
parent | 37584753704e12d68043af1abd7e9c33c919c29b (diff) | |
download | gpu-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.c | 8 |
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) |