linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/14] sched: balance callbacks
@ 2015-06-05  8:48 Peter Zijlstra
  2015-06-05  8:48 ` [PATCH 01/14] sched: Replace post_schedule with a balance callback list Peter Zijlstra
                   ` (13 more replies)
  0 siblings, 14 replies; 55+ messages in thread
From: Peter Zijlstra @ 2015-06-05  8:48 UTC (permalink / raw)
  To: umgwanakikbuti, mingo
  Cc: ktkhai, rostedt, tglx, juri.lelli, pang.xunlei, oleg, wanpeng.li,
	linux-kernel, peterz

Mike stumbled over a cute bug where the RT/DL balancing ops caused a bug.

The exact scenario is __sched_setscheduler() changing a (runnable) task from
FIFO to OTHER. In swiched_from_rt(), where we do pull_rt_task() we temporarity
drop rq->lock. This gap allows regular cfs load-balancing to step in and
migrate our task.

However, check_class_changed() will happily continue with switched_to_fair()
which assumes our task is still on the old rq and makes the kernel go boom.

Instead of trying to patch this up and make things complicated; simply disallow
these methods to drop rq->lock and extend the current post_schedule stuff into
a balancing callback list, and use that.

This survives Mike's testcase.

Changes since -v2:
 - reworked the hrtimer patch. -- Kirill, tglx
 - added lock pinning

Changes since -v1:
 - make SMP=n build,
 - cured switched_from_dl()'s cancel_dl_timer().

no real tests on the new parts other than booting / building kernels.


^ permalink raw reply	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2015-06-11 16:25 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-05  8:48 [PATCH 00/14] sched: balance callbacks Peter Zijlstra
2015-06-05  8:48 ` [PATCH 01/14] sched: Replace post_schedule with a balance callback list Peter Zijlstra
2015-06-05  8:48 ` [PATCH 02/14] sched: Use replace normalize_task() with __sched_setscheduler() Peter Zijlstra
2015-06-05  8:48 ` [PATCH 03/14] sched: Allow balance callbacks for check_class_changed() Peter Zijlstra
2015-06-05  8:48 ` [PATCH 04/14] sched,rt: Remove return value from pull_rt_task() Peter Zijlstra
2015-06-05  8:48 ` [PATCH 05/14] sched,rt: Convert switched_{from,to}_rt() / prio_changed_rt() to balance callbacks Peter Zijlstra
2015-06-05  8:48 ` [PATCH 06/14] sched,dl: Remove return value from pull_dl_task() Peter Zijlstra
2015-06-05  8:48 ` [PATCH 07/14] sched,dl: Convert switched_{from,to}_dl() / prio_changed_dl() to balance callbacks Peter Zijlstra
2015-06-05  8:48 ` [PATCH 08/14] hrtimer: Allow hrtimer::function() to free the timer Peter Zijlstra
2015-06-05  9:48   ` Thomas Gleixner
2015-06-07 19:43   ` Oleg Nesterov
2015-06-07 22:33   ` Oleg Nesterov
2015-06-07 22:56     ` Oleg Nesterov
2015-06-08  8:06       ` Thomas Gleixner
2015-06-08  9:14     ` Peter Zijlstra
2015-06-08 10:55       ` Peter Zijlstra
2015-06-08 12:42       ` Peter Zijlstra
2015-06-08 14:27         ` Oleg Nesterov
2015-06-08 14:42           ` Peter Zijlstra
2015-06-08 15:49             ` Oleg Nesterov
2015-06-08 15:10           ` Peter Zijlstra
2015-06-08 15:16             ` Oleg Nesterov
2015-06-09 21:33         ` Oleg Nesterov
2015-06-09 21:39           ` Oleg Nesterov
2015-06-10  6:55           ` Peter Zijlstra
2015-06-10  7:46           ` Kirill Tkhai
2015-06-10 16:04             ` Oleg Nesterov
2015-06-11  7:31               ` Peter Zijlstra
2015-06-11 16:25               ` Kirill Tkhai
2015-06-10 15:49           ` Oleg Nesterov
2015-06-10 22:37           ` Peter Zijlstra
2015-06-08 14:03       ` Oleg Nesterov
2015-06-08 14:17       ` Peter Zijlstra
2015-06-08 15:10         ` [PATCH 0/3] hrtimer: HRTIMER_STATE_ fixes Oleg Nesterov
2015-06-08 15:11           ` [PATCH 2/3] hrtimer: turn newstate arg of __remove_hrtimer() into clear_enqueued Oleg Nesterov
2015-06-08 15:11           ` [PATCH 3/3] hrtimer: fix the __hrtimer_start_range_ns() race with hrtimer_active() Oleg Nesterov
2015-06-08 15:12           ` [PATCH 1/3] hrtimer: kill HRTIMER_STATE_MIGRATE, fix the race with hrtimer_is_queued() Oleg Nesterov
2015-06-08 15:35           ` [PATCH 0/3] hrtimer: HRTIMER_STATE_ fixes Peter Zijlstra
2015-06-08 15:56             ` Oleg Nesterov
2015-06-08 17:11             ` Thomas Gleixner
2015-06-08 19:08               ` Peter Zijlstra
2015-06-08 20:52               ` Oleg Nesterov
2015-06-08 15:10         ` [PATCH 1/3] hrtimer: kill HRTIMER_STATE_MIGRATE, fix the race with hrtimer_is_queued() Oleg Nesterov
2015-06-08 15:13           ` Oleg Nesterov
2015-06-05  8:48 ` [PATCH 09/14] sched,dl: Fix sched class hopping CBS hole Peter Zijlstra
2015-06-05  8:48 ` [PATCH 10/14] sched: Move code around Peter Zijlstra
2015-06-05  8:48 ` [PATCH 11/14] sched: Streamline the task migration locking a little Peter Zijlstra
2015-06-05  8:48 ` [PATCH 12/14] lockdep: Simplify lock_release() Peter Zijlstra
2015-06-05  8:48 ` [PATCH 13/14] lockdep: Implement lock pinning Peter Zijlstra
2015-06-05  9:55   ` Ingo Molnar
2015-06-11 11:37     ` Peter Zijlstra
2015-06-05  8:48 ` [PATCH 14/14] sched,lockdep: Employ " Peter Zijlstra
2015-06-05  9:57   ` Ingo Molnar
2015-06-05 11:03     ` Peter Zijlstra
2015-06-05 11:24       ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).