summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Zijlstra <peterz@infradead.org>2016-10-03 10:53:49 -0400
committerIngo Molnar <mingo@kernel.org>2017-03-16 04:46:21 -0400
commit26ae58d23b94a075ae724fd18783a3773131cfbc (patch)
tree2838d38cfafb54b10b97cbe9e39cb3cf0d90115e
parent3e777f9909483b603946685d88acfae89f31b07b (diff)
sched/core: Add WARNING for multiple update_rq_clock() calls
Now that we have no missing calls, add a warning to find multiple calls. By having only a single update_rq_clock() call per rq-lock section, the section appears 'atomic' wrt time. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--kernel/sched/core.c3
-rw-r--r--kernel/sched/features.h7
2 files changed, 10 insertions, 0 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 3b31fc05a0f1..1bd15d0d0307 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -233,8 +233,11 @@ void update_rq_clock(struct rq *rq)
233 return; 233 return;
234 234
235#ifdef CONFIG_SCHED_DEBUG 235#ifdef CONFIG_SCHED_DEBUG
236 if (sched_feat(WARN_DOUBLE_CLOCK))
237 SCHED_WARN_ON(rq->clock_update_flags & RQCF_UPDATED);
236 rq->clock_update_flags |= RQCF_UPDATED; 238 rq->clock_update_flags |= RQCF_UPDATED;
237#endif 239#endif
240
238 delta = sched_clock_cpu(cpu_of(rq)) - rq->clock; 241 delta = sched_clock_cpu(cpu_of(rq)) - rq->clock;
239 if (delta < 0) 242 if (delta < 0)
240 return; 243 return;
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
index 1b3c8189b286..11192e0cb122 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -56,6 +56,13 @@ SCHED_FEAT(TTWU_QUEUE, true)
56 */ 56 */
57SCHED_FEAT(SIS_AVG_CPU, false) 57SCHED_FEAT(SIS_AVG_CPU, false)
58 58
59/*
60 * Issue a WARN when we do multiple update_rq_clock() calls
61 * in a single rq->lock section. Default disabled because the
62 * annotations are not complete.
63 */
64SCHED_FEAT(WARN_DOUBLE_CLOCK, false)
65
59#ifdef HAVE_RT_PUSH_IPI 66#ifdef HAVE_RT_PUSH_IPI
60/* 67/*
61 * In order to avoid a thundering herd attack of CPUs that are 68 * In order to avoid a thundering herd attack of CPUs that are