sched/core: Fixed missing rq clock update before calling set_rq_offline()
authorHao Jia <jiahao.os@bytedance.com>
Tue, 13 Jun 2023 08:20:09 +0000 (16:20 +0800)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 16 Jun 2023 20:08:12 +0000 (22:08 +0200)
commitcab3ecaed5cdcc9c36a96874b4c45056a46ece45
tree3035cb97a2293a9453f4c528551e3205a940c9e0
parente20f204c88d595c04fc9197794bb68c0fbabd902
sched/core: Fixed missing rq clock update before calling set_rq_offline()

When using a cpufreq governor that uses
cpufreq_add_update_util_hook(), it is possible to trigger a missing
update_rq_clock() warning for the CPU hotplug path:

  rq_attach_root()
    set_rq_offline()
      rq_offline_rt()
__disable_runtime()
  sched_rt_rq_enqueue()
    enqueue_top_rt_rq()
      cpufreq_update_util()
data->func(data, rq_clock(rq), flags)

Move update_rq_clock() from sched_cpu_deactivate() (one of it's
callers) into set_rq_offline() such that it covers all
set_rq_offline() usage.

Additionally change rq_attach_root() to use rq_lock_irqsave() so that
it will properly manage the runqueue clock flags.

Suggested-by: Ben Segall <bsegall@google.com>
Signed-off-by: Hao Jia <jiahao.os@bytedance.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
Link: https://lkml.kernel.org/r/20230613082012.49615-2-jiahao.os@bytedance.com
kernel/sched/core.c
kernel/sched/topology.c