All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH 0/7] sched: balance callbacks
@ 2015-06-01 13:58 Peter Zijlstra
  2015-06-01 13:58 ` [RFC][PATCH 1/7] sched: Replace post_schedule with a balance callback list Peter Zijlstra
                   ` (8 more replies)
  0 siblings, 9 replies; 26+ messages in thread
From: Peter Zijlstra @ 2015-06-01 13:58 UTC (permalink / raw)
  To: umgwanakikbuti, mingo
  Cc: ktkhai, rostedt, juri.lelli, pang.xunlei, oleg, linux-kernel,
	Peter Zijlstra

Hi,

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.

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 for well over an hour on my ivb-ep. I've not yet
tested it on anything bigger.


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

end of thread, other threads:[~2015-06-05  7:19 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-01 13:58 [RFC][PATCH 0/7] sched: balance callbacks Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 1/7] sched: Replace post_schedule with a balance callback list Peter Zijlstra
2015-06-03  4:41   ` Kamalesh Babulal
2015-06-03  7:21     ` Peter Zijlstra
2015-06-03  8:24   ` pang.xunlei
2015-06-03  8:55     ` Peter Zijlstra
2015-06-05  7:13       ` pang.xunlei
2015-06-05  7:19         ` Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 2/7] sched: Use replace normalize_task() with __sched_setscheduler() Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 3/7] sched: Allow balance callbacks for check_class_changed() Peter Zijlstra
2015-06-02 13:58   ` Kirill Tkhai
2015-06-02 14:27     ` Peter Zijlstra
2015-06-02 16:07       ` Peter Zijlstra
2015-06-02 16:27         ` Kirill Tkhai
2015-06-03  7:32           ` Peter Zijlstra
2015-06-03 10:40             ` Kirill Tkhai
2015-06-03 10:42             ` Kirill Tkhai
2015-06-03 10:45               ` Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 4/7] sched,rt: Remove return value from pull_rt_task() Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 5/7] sched,rt: Convert switched_{from,to}_rt() / prio_changed_rt() to balance callbacks Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 6/7] sched,dl: Remove return value from pull_dl_task() Peter Zijlstra
2015-06-01 13:58 ` [RFC][PATCH 7/7] sched,dl: Convert switched_{from,to}_dl() / prio_changed_dl() to balance callbacks Peter Zijlstra
2015-06-03  4:52   ` Kamalesh Babulal
2015-06-01 14:16 ` [RFC][PATCH 0/7] sched: " Peter Zijlstra
2015-06-01 14:42 ` Mike Galbraith
2015-06-02  6:48   ` Mike Galbraith

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.