cpufreq: schedutil: Queue sugov irq work on policy online cpu

Got never update frequency if scheduled the irq
work on an offlined cpu and it will always pending.
Queue sugov irq work on any online cpu if current
cpu is offline.

Change-Id: I33fc691917b5866488b6aeb11ed902a2753130b2
Signed-off-by: Maria Yu <aiquny@codeaurora.org>
[clingutla@codeaurora.org: Moved 'walt_irq_work_queue' to 'sched.h'
 for multiple callers]
Signed-off-by: Lingutla Chandrasekhar <clingutla@codeaurora.org>
This commit is contained in:
Maria Yu 2019-08-13 17:25:28 +08:00 • committed by Lingutla Chandrasekhar
commit 9af2c23239
2 changed files with 16 additions and 1 deletions

View file

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

View file

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