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:
Shivnandan Kumar 2024-08-06 11:07:38 +05:30
parent 7bf59b2974
commit 23a1aabf8f

View File

@ -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);