sched/fair: Wrap rq->rd->overload accesses with READ/WRITE_ONCE()
This variable can be read and set locklessly within update_sd_lb_stats(). As such, READ/WRITE_ONCE() are added to make sure nothing terribly wrong can happen because of the compiler. Signed-off-by: Valentin Schneider <valentin.schneider@arm.com> Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: dietmar.eggemann@arm.com Cc: gaku.inami.xh@renesas.com Cc: vincent.guittot@linaro.org Link: http://lkml.kernel.org/r/1530699470-29808-9-git-send-email-morten.rasmussen@arm.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
575638d104
commit
e90c8fe15a
|
@ -8058,8 +8058,8 @@ next_group:
|
||||||
|
|
||||||
if (!env->sd->parent) {
|
if (!env->sd->parent) {
|
||||||
/* update overload indicator if we are at root domain */
|
/* update overload indicator if we are at root domain */
|
||||||
if (env->dst_rq->rd->overload != overload)
|
if (READ_ONCE(env->dst_rq->rd->overload) != overload)
|
||||||
env->dst_rq->rd->overload = overload;
|
WRITE_ONCE(env->dst_rq->rd->overload, overload);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9502,7 +9502,7 @@ static int idle_balance(struct rq *this_rq, struct rq_flags *rf)
|
||||||
rq_unpin_lock(this_rq, rf);
|
rq_unpin_lock(this_rq, rf);
|
||||||
|
|
||||||
if (this_rq->avg_idle < sysctl_sched_migration_cost ||
|
if (this_rq->avg_idle < sysctl_sched_migration_cost ||
|
||||||
!this_rq->rd->overload) {
|
!READ_ONCE(this_rq->rd->overload)) {
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
sd = rcu_dereference_check_sched_domain(this_rq->sd);
|
sd = rcu_dereference_check_sched_domain(this_rq->sd);
|
||||||
|
|
|
@ -1697,8 +1697,8 @@ static inline void add_nr_running(struct rq *rq, unsigned count)
|
||||||
|
|
||||||
if (prev_nr < 2 && rq->nr_running >= 2) {
|
if (prev_nr < 2 && rq->nr_running >= 2) {
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
if (!rq->rd->overload)
|
if (!READ_ONCE(rq->rd->overload))
|
||||||
rq->rd->overload = 1;
|
WRITE_ONCE(rq->rd->overload, 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue