linux/kernel/sched
Ben Segall 9ca715c462 sched: Fix hrtimer_cancel()/rq->lock deadlock
commit 927b54fccb upstream.

__start_cfs_bandwidth calls hrtimer_cancel while holding rq->lock,
waiting for the hrtimer to finish. However, if sched_cfs_period_timer
runs for another loop iteration, the hrtimer can attempt to take
rq->lock, resulting in deadlock.

Fix this by ensuring that cfs_b->timer_active is cleared only if the
_latest_ call to do_sched_cfs_period_timer is returning as idle. Then
__start_cfs_bandwidth can just call hrtimer_try_to_cancel and wait for
that to succeed or timer_active == 1.

Signed-off-by: Ben Segall <bsegall@google.com>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Cc: pjt@google.com
Link: http://lkml.kernel.org/r/20131016181622.22647.16643.stgit@sword-of-the-dawn.mtv.corp.google.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Chris J Arges <chris.j.arges@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-01-15 15:28:54 -08:00
..
auto_group.c sched: split out css_online/css_offline from tg creation/destruction 2013-01-24 12:05:18 -08:00
auto_group.h Revert "sched/autogroup: Fix crash on reboot when autogroup is disabled" 2012-12-11 10:23:45 +01:00
clock.c sched_clock: Prevent 64bit inatomicity on 32bit systems 2013-04-08 11:50:44 +02:00
core.c sched: Fix race on toggling cfs_bandwidth_used 2014-01-15 15:28:54 -08:00
cpuacct.c sched/cpuacct/UML: Fix header file dependency bug on the UML build 2013-04-10 15:12:41 +02:00
cpuacct.h sched/cpuacct: Initialize root cpuacct earlier 2013-04-10 13:54:20 +02:00
cpupri.c sched/rt: Move rt specific bits into new header file 2013-02-07 20:51:08 +01:00
cpupri.h
cputime.c sched/cputime: Do not scale when utime == 0 2013-10-01 09:17:45 -07:00
debug.c sched: Avoid throttle_cfs_rq() racing with period_timer stopping 2013-12-20 07:45:11 -08:00
fair.c sched: Fix hrtimer_cancel()/rq->lock deadlock 2014-01-15 15:28:54 -08:00
features.h mutex: Move mutex spinning code from sched/core.c back to mutex.c 2013-04-19 09:33:34 +02:00
idle_task.c sched: Keep at least 1 tick per second for active dynticks tasks 2013-05-04 08:32:02 +02:00
Makefile sched: Split cpuacct code out of core.c 2013-04-10 13:54:15 +02:00
rt.c sched/rt: Fix rq's cpupri leak while enqueue/dequeue child RT entities 2014-01-09 12:24:21 -08:00
sched.h sched: Fix race on toggling cfs_bandwidth_used 2014-01-15 15:28:54 -08:00
stats.c fix a leak in /proc/schedstats 2013-04-29 15:41:45 -04:00
stats.h Merge branch 'sched/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into cputime-tip 2011-12-19 19:23:15 +01:00
stop_task.c sched: Fix migration thread runtime bogosity 2012-08-13 18:41:55 +02:00