diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 70de34338384..10c490521a54 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -263,7 +263,7 @@ static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time, if (use_pelt()) sg_policy->work_in_progress = true; - irq_work_queue(&sg_policy->irq_work); + walt_irq_work_queue(&sg_policy->irq_work); } #define TARGET_LOAD 80 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index d7df89dbff31..165369e4acf9 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -3368,3 +3368,18 @@ extern void walt_init_sched_boost(struct task_group *tg); #else static inline void walt_init_sched_boost(struct task_group *tg) {} #endif + +#ifdef CONFIG_SCHED_WALT +static inline void walt_irq_work_queue(struct irq_work *work) +{ + if (likely(cpu_online(raw_smp_processor_id()))) + irq_work_queue(work); + else + irq_work_queue_on(work, cpumask_any(cpu_online_mask)); +} +#else +static inline void walt_irq_work_queue(struct irq_work *work) +{ + irq_work_queue(work); +} +#endif