drivers: dcvs: bwmon: synchronize_irq before hibernation
During the hibernation preparation phase, the bwmon driver disables the bwmon hardware, including its IRQ. However, there can be instances where a bwmon IRQ remains pending at the GIC level even after the hardware and IRQ are disabled. Upon hibernation exit, the GIC resumes first and restores all pending IRQs, including bwmon if it was pending before hibernation entry. This can lead to an IRQ storm. To fix this, call synchronize_irq before hibernation entry to ensure that there are no pending bwmon IRQs before hibernation entry. Change-Id: Ib64510cb93296f37ab5fecd8944ce33a3c95e17b Signed-off-by: Shivnandan Kumar <quic_kshivnan@quicinc.com>
This commit is contained in:
parent
7bf59b2974
commit
23a1aabf8f
@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "qcom-bwmon: " fmt
|
||||
@ -1702,6 +1702,7 @@ void __stop_bw_hwmon(struct bw_hwmon *hw, enum mon_reg_type type)
|
||||
|
||||
bwmon_monitor_stop(hw);
|
||||
mon_irq_disable(m, type);
|
||||
synchronize_irq(m->irq);
|
||||
free_irq(m->irq, m);
|
||||
mon_disable(m, type);
|
||||
mon_clear(m, true, type);
|
||||
|
Loading…
Reference in New Issue
Block a user