aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>2023-05-04 12:43:21 +0200
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>2023-05-04 12:43:21 +0200
commit6ba2adb72539254becfcbe680872c7a8c69b9165 (patch)
treebeb2e833ceec097f1d82185c82ff4873a1fa6a5c
parentfc927c36cb0aa5bd9ada0627a4c44f1152b40d78 (diff)
parentd75b809d8b996499654e2eba99c98c6e3441e99a (diff)
Merge branch 'z-linaro/tracking-qcomlt-rt-drivers' into z-linaro/tracking-qcomlt-rt
-rw-r--r--drivers/cpufreq/qcom-cpufreq-hw.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
index b2d2907200a9..f76c171124d2 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
@@ -389,7 +389,16 @@ static irqreturn_t qcom_lmh_dcvs_handle_irq(int irq, void *data)
/* Disable interrupt and enable polling */
disable_irq_nosync(c_data->throttle_irq);
- schedule_delayed_work(&c_data->throttle_work, 0);
+
+ /*
+ * Workqueue prefers local CPUs and since interrupts have set affinity,
+ * the work might execute on a CPU dedicated to realtime tasks.
+ */
+ if (IS_ENABLED(CONFIG_PREEMPT_RT))
+ queue_delayed_work_on(WORK_CPU_UNBOUND, system_unbound_wq,
+ &c_data->throttle_work, 0);
+ else
+ schedule_delayed_work(&c_data->throttle_work, 0);
if (qcom_cpufreq.soc_data->reg_intr_clr)
writel_relaxed(GT_IRQ_STATUS,