Peter Zijlstra
b17718d02f
sched/stop_machine: Fix deadlock between multiple stop_two_cpus()
...
Jiri reported a machine stuck in multi_cpu_stop() with
migrate_swap_stop() as function and with the following src,dst cpu
pairs: {11, 4} {13, 11} { 4, 13}
4 11 13
cpuM: queue(4 ,13)
*Ma
cpuN: queue(13,11)
*N Na
*M Mb
cpuO: queue(11, 4)
*O Oa
*Nb
*Ob
Where *X denotes the cpu running the queueing of cpu-X and X[ab] denotes
the first/second queued work.
You'll observe the top of the workqueue for each cpu: 4,11,13 to be work
from cpus: M, O, N resp. IOW. deadlock.
Do away with the queueing trickery and introduce lg_double_lock() to
lock both CPUs and fully serialize the stop_two_cpus() callers instead
of the partial (and buggy) serialization we have now.
Reported-by: Jiri Olsa <jolsa@redhat.com >
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org >
Cc: Andrew Morton <akpm@linux-foundation.org >
Cc: Borislav Petkov <bp@alien8.de >
Cc: H. Peter Anvin <hpa@zytor.com >
Cc: Linus Torvalds <torvalds@linux-foundation.org >
Cc: Oleg Nesterov <oleg@redhat.com >
Cc: Peter Zijlstra <peterz@infradead.org >
Cc: Rik van Riel <riel@redhat.com >
Cc: Thomas Gleixner <tglx@linutronix.de >
Link: http://lkml.kernel.org/r/20150605153023.GH19282@twins.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org >
2015-06-19 10:03:12 +02:00
..
2015-04-22 18:33:48 +03:00
2015-04-22 09:24:55 -07:00
2015-04-22 18:33:43 +03:00
2015-04-24 09:49:37 -07:00
2015-05-09 14:59:05 -07:00
2015-04-26 13:36:02 -07:00
2015-04-15 15:51:50 -04:00
2015-04-24 09:49:37 -07:00
2015-04-13 20:08:38 +02:00
2015-05-08 11:22:30 -07:00
2015-04-22 08:00:41 +10:00
2015-04-10 19:16:03 +01:00
2015-05-08 11:53:55 +02:00
2015-04-15 09:00:47 -07:00
2015-04-23 15:16:37 -04:00
2015-04-15 16:35:22 -07:00
2015-04-24 08:23:45 -07:00
2015-04-22 08:00:42 +10:00
2015-04-17 09:03:56 -04:00
2015-04-17 09:03:53 -04:00
2015-05-04 13:09:55 -06:00
2015-04-17 08:31:12 -06:00
2015-05-12 17:21:22 -04:00
2015-05-19 08:39:11 +02:00
2015-05-25 00:16:07 -04:00
2015-04-15 16:35:22 -07:00
2015-04-14 16:49:03 -07:00
2015-04-10 17:45:30 -07:00
2015-04-24 08:23:45 -07:00
2015-04-14 16:49:04 -07:00
2015-04-15 16:35:17 -07:00
2015-05-04 17:49:51 +08:00
2015-05-04 17:49:51 +08:00
2015-05-04 17:49:51 +08:00
2015-04-13 10:19:30 +02:00
2015-05-28 11:05:20 +09:30
2015-04-15 16:35:22 -07:00
2015-04-15 15:05:28 -04:00
2015-04-14 20:21:54 -07:00
2015-04-21 14:47:16 +05:30
2015-04-17 23:18:53 +05:30
2015-04-14 16:49:05 -07:00
2015-04-10 15:08:57 -07:00
2015-04-09 11:39:55 -05:00
2015-04-26 17:22:07 -07:00
2015-05-06 23:03:23 -04:00
2015-05-14 17:55:51 -07:00
2015-05-19 08:39:11 +02:00
2015-05-12 14:13:20 +02:00
2015-04-14 09:25:26 -07:00
2015-05-19 08:39:14 +02:00
2015-04-15 16:35:19 -07:00
2015-04-14 20:21:54 -07:00
2015-04-10 21:57:22 -07:00
2015-05-08 12:17:46 +02:00
2015-04-08 23:28:28 +02:00
2015-05-19 08:39:14 +02:00
2015-04-21 09:42:58 -07:00
2015-04-18 12:32:59 -07:00
2015-04-15 16:35:22 -07:00
2015-04-11 11:17:28 +02:00
2015-04-09 09:40:24 +02:00
2015-04-15 16:35:20 -07:00
2015-04-21 09:44:55 -03:00
2015-05-19 08:39:14 +02:00
2015-04-23 16:52:01 +02:00
2015-04-15 16:35:17 -07:00
2015-05-13 10:19:35 +02:00
2015-04-14 13:58:48 -07:00
2015-06-19 10:03:12 +02:00
2015-04-25 16:50:14 -04:00
2015-04-14 16:49:06 -07:00
2015-05-14 17:55:51 -07:00
2015-04-14 16:49:00 -07:00
2015-04-15 16:35:18 -07:00
2015-04-14 16:49:05 -07:00
2015-04-17 09:04:07 -04:00
2015-04-22 09:44:36 -07:00
2015-04-15 16:35:16 -07:00
2015-04-14 10:49:03 -07:00
2015-04-18 11:20:31 -04:00
2015-04-11 15:27:37 -04:00
2015-05-12 23:22:03 -04:00
2015-04-24 20:51:40 +02:00
2015-04-13 16:35:16 -04:00
2015-04-21 16:16:04 -04:00
2015-04-26 17:33:59 -07:00
2015-04-23 14:36:28 -04:00
2015-05-05 17:10:11 -07:00
2015-04-14 16:48:59 -07:00
2015-04-07 19:11:06 -06:00
2015-04-14 19:35:44 -05:00
2015-04-14 19:23:24 -05:00
2015-04-24 08:46:18 -07:00
2015-04-14 16:49:05 -07:00
2015-04-15 16:35:19 -07:00
2015-05-06 10:47:25 -07:00
2015-04-08 16:25:25 -05:00
2015-04-09 14:20:11 -05:00
2015-04-16 13:53:32 -05:00
2015-05-29 07:39:34 +10:00
2015-04-12 21:03:31 +02:00
2015-06-07 15:57:43 +02:00
2015-04-15 16:35:23 -07:00
2015-04-15 16:35:23 -07:00
2015-05-16 18:08:26 -04:00
2015-04-15 16:35:19 -07:00
2015-04-29 14:59:16 -04:00
2015-05-19 08:39:18 +02:00
2015-04-15 09:00:47 -07:00
2015-04-10 14:39:53 +02:00
2015-05-20 13:51:25 +02:00
2015-04-14 16:48:59 -07:00
2015-04-20 09:08:49 -07:00
2015-04-11 15:53:35 -04:00
2015-04-14 09:50:27 -07:00
2015-04-16 13:58:42 -04:00
2015-04-16 19:02:04 -04:00
2015-04-15 16:35:17 -07:00
2015-04-17 09:04:07 -04:00
2015-05-22 13:46:06 -04:00
2015-05-27 15:22:15 +02:00
2015-04-08 09:39:56 -04:00
2015-05-10 19:26:37 +02:00
2015-04-15 16:35:22 -07:00
2015-05-19 08:39:18 +02:00
2015-05-14 17:55:51 -07:00
2015-04-11 22:29:44 -04:00
2015-04-28 12:48:57 +02:00
2015-05-05 17:10:11 -07:00
2015-04-14 18:06:47 -07:00
2015-04-13 21:04:16 +09:30
2015-04-15 12:41:14 +09:30
2015-05-08 12:05:41 +02:00
2015-04-15 16:35:20 -07:00