diff options
author | Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> | 2021-11-11 17:48:07 +0200 |
---|---|---|
committer | Viresh Kumar <viresh.kumar@linaro.org> | 2021-11-25 12:19:38 +0530 |
commit | e0e27c3d4e20dab861566f1c348ae44e4b498630 (patch) | |
tree | ba2ad8f42411fe22b08bf4fbfbb1ebb0d384e9bd /drivers/cpufreq | |
parent | be6592ed56a7cca8a001ff339cb9325bfa3c6e3f (diff) | |
download | linux-stable-e0e27c3d4e20dab861566f1c348ae44e4b498630.tar.gz linux-stable-e0e27c3d4e20dab861566f1c348ae44e4b498630.tar.bz2 linux-stable-e0e27c3d4e20dab861566f1c348ae44e4b498630.zip |
cpufreq: qcom-hw: Fix probable nested interrupt handling
Re-enabling an interrupt from its own interrupt handler may cause
an interrupt storm, if there is a pending interrupt and because its
handling is disabled due to already done entrance into the handler
above in the stack.
Also, apparently it is improper to lock a mutex in an interrupt contex.
Fixes: 275157b367f4 ("cpufreq: qcom-cpufreq-hw: Add dcvs interrupt support")
Signed-off-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r-- | drivers/cpufreq/qcom-cpufreq-hw.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index 63c11e7dfba0..5b609e205435 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -335,9 +335,9 @@ static irqreturn_t qcom_lmh_dcvs_handle_irq(int irq, void *data) /* Disable interrupt and enable polling */ disable_irq_nosync(c_data->throttle_irq); - qcom_lmh_dcvs_notify(c_data); + schedule_delayed_work(&c_data->throttle_work, 0); - return 0; + return IRQ_HANDLED; } static const struct qcom_cpufreq_soc_data qcom_soc_data = { |