mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
sched/fair: Clean up definition of NOHZ blocked load functions
cfs_rq_has_blocked() and others_have_blocked() are only used within update_blocked_averages(). The !CONFIG_FAIR_GROUP_SCHED version of the latter calls them within a #define CONFIG_NO_HZ_COMMON block, whereas the CONFIG_FAIR_GROUP_SCHED one calls them unconditionnally. As reported by Qian, the above leads to this warning in !CONFIG_NO_HZ_COMMON configs: kernel/sched/fair.c: In function 'update_blocked_averages': kernel/sched/fair.c:7750:7: warning: variable 'done' set but not used [-Wunused-but-set-variable] It wouldn't be wrong to keep cfs_rq_has_blocked() and others_have_blocked() as they are, but since their only current use is to figure out when we can stop calling update_blocked_averages() on fully decayed NOHZ idle CPUs, we can give them a new definition for !CONFIG_NO_HZ_COMMON. Change the definition of cfs_rq_has_blocked() and others_have_blocked() for !CONFIG_NO_HZ_COMMON so that the NOHZ-specific blocks of update_blocked_averages() become no-ops and the 'done' variable gets optimised out. While at it, remove the CONFIG_NO_HZ_COMMON block from the !CONFIG_FAIR_GROUP_SCHED definition of update_blocked_averages() by using the newly-introduced update_blocked_load_status() helper. No change in functionality intended. [ Additions by Peter Zijlstra. ] Reported-by: Qian Cai <cai@lca.pw> Signed-off-by: Valentin Schneider <valentin.schneider@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Vincent Guittot <vincent.guittot@linaro.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20190603115424.7951-1-valentin.schneider@arm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
e3b929b0a1
commit
b0c7922441
@ -7393,6 +7393,7 @@ static void attach_tasks(struct lb_env *env)
|
||||
rq_unlock(env->dst_rq, &rf);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NO_HZ_COMMON
|
||||
static inline bool cfs_rq_has_blocked(struct cfs_rq *cfs_rq)
|
||||
{
|
||||
if (cfs_rq->avg.load_avg)
|
||||
@ -7420,6 +7421,19 @@ static inline bool others_have_blocked(struct rq *rq)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void update_blocked_load_status(struct rq *rq, bool has_blocked)
|
||||
{
|
||||
rq->last_blocked_load_update_tick = jiffies;
|
||||
|
||||
if (!has_blocked)
|
||||
rq->has_blocked_load = 0;
|
||||
}
|
||||
#else
|
||||
static inline bool cfs_rq_has_blocked(struct cfs_rq *cfs_rq) { return false; }
|
||||
static inline bool others_have_blocked(struct rq *rq) { return false; }
|
||||
static inline void update_blocked_load_status(struct rq *rq, bool has_blocked) {}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FAIR_GROUP_SCHED
|
||||
|
||||
static inline bool cfs_rq_is_decayed(struct cfs_rq *cfs_rq)
|
||||
@ -7485,11 +7499,7 @@ static void update_blocked_averages(int cpu)
|
||||
if (others_have_blocked(rq))
|
||||
done = false;
|
||||
|
||||
#ifdef CONFIG_NO_HZ_COMMON
|
||||
rq->last_blocked_load_update_tick = jiffies;
|
||||
if (done)
|
||||
rq->has_blocked_load = 0;
|
||||
#endif
|
||||
update_blocked_load_status(rq, !done);
|
||||
rq_unlock_irqrestore(rq, &rf);
|
||||
}
|
||||
|
||||
@ -7555,11 +7565,7 @@ static inline void update_blocked_averages(int cpu)
|
||||
update_rt_rq_load_avg(rq_clock_pelt(rq), rq, curr_class == &rt_sched_class);
|
||||
update_dl_rq_load_avg(rq_clock_pelt(rq), rq, curr_class == &dl_sched_class);
|
||||
update_irq_load_avg(rq, 0);
|
||||
#ifdef CONFIG_NO_HZ_COMMON
|
||||
rq->last_blocked_load_update_tick = jiffies;
|
||||
if (!cfs_rq_has_blocked(cfs_rq) && !others_have_blocked(rq))
|
||||
rq->has_blocked_load = 0;
|
||||
#endif
|
||||
update_blocked_load_status(rq, cfs_rq_has_blocked(cfs_rq) || others_have_blocked(rq));
|
||||
rq_unlock_irqrestore(rq, &rf);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user