Devin Kim
9ab8daa7c6
workqueue: skip nr_running sanity check in worker_enter_idle() if trustee is active
...
worker_enter_idle() has WARN_ON_ONCE() which triggers if nr_running
isn't zero when every worker is idle. This can trigger spuriously
while a cpu is going down due to the way trustee sets %WORKER_ROGUE
and zaps nr_running.
It first sets %WORKER_ROGUE on all workers without updating
nr_running, releases gcwq->lock, schedules, regrabs gcwq->lock and
then zaps nr_running. If the last running worker enters idle
inbetween, it would see stale nr_running which hasn't been zapped yet
and trigger the WARN_ON_ONCE().
Fix it by performing the sanity check iff the trustee is idle.
Change-Id: I78c6300647a9e14a5f5f27fee0679d9072481188
Signed-off-by: Tejun Heo <tj@kernel.org >
Reported-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com >
Cc: stable@vger.kernel.org
2013-03-04 12:48:24 -08:00
..
2012-05-18 17:03:10 -07:00
2012-04-26 13:51:31 +02:00
2011-07-26 16:49:45 -07:00
2013-02-25 11:25:46 -08:00
2013-02-25 11:25:46 -08:00
2013-02-25 11:25:46 -08:00
2013-02-25 11:25:46 -08:00
2013-02-20 01:32:27 -08:00
2012-01-08 12:19:57 -08:00
2012-01-13 09:32:18 +10:30
2011-07-20 14:10:11 -07:00
2012-03-20 21:29:40 -04:00
2012-01-17 16:16:57 -05:00
2012-01-17 16:17:01 -05:00
2012-01-23 08:44:53 -08:00
2012-01-17 10:19:41 -08:00
2012-02-02 09:20:22 -08:00
2012-04-09 13:53:12 -07:00
2012-05-10 08:58:33 -07:00
2011-07-25 20:57:15 -07:00
2011-09-23 12:05:29 +05:30
2012-04-09 13:57:52 -07:00
2012-04-02 08:53:24 -07:00
2011-11-06 19:44:47 -08:00
2012-04-11 08:20:11 -07:00
2011-07-14 12:59:14 +03:00
2012-03-28 18:30:03 +01:00
2012-03-29 18:12:23 -07:00
2011-05-20 08:56:56 +02:00
2012-05-14 16:41:02 -07:00
2012-03-04 23:08:54 +01:00
2012-03-29 11:37:17 +02:00
2012-03-29 11:37:17 +02:00
2011-10-31 09:20:12 -04:00
2011-11-28 08:43:52 -08:00
2012-03-05 15:49:42 -08:00
2012-04-13 13:15:16 -04:00
2012-04-10 11:00:30 +02:00
2012-02-28 20:01:08 +01:00
2013-02-08 15:14:22 -08:00
2012-03-23 13:18:57 +01:00
2012-03-23 13:18:57 +01:00
2012-03-28 17:19:28 -07:00
2011-10-31 09:20:12 -04:00
2012-03-28 23:30:28 +02:00
2012-03-05 15:49:42 -08:00
2011-10-31 09:20:13 -04:00
2011-11-23 09:28:17 -08:00
2011-10-31 09:20:12 -04:00
2011-10-31 09:20:12 -04:00
2012-02-21 09:06:06 -08:00
2012-01-24 16:37:54 -08:00
2012-03-26 12:50:53 +10:30
2011-10-31 09:20:12 -04:00
2012-03-01 10:28:03 +01:00
2011-10-31 09:20:12 -04:00
2011-10-31 09:20:12 -04:00
2012-03-29 19:52:46 +08:00
2013-03-04 12:43:39 -08:00
2012-03-26 12:50:51 +10:30
2012-03-28 17:14:36 -07:00
2012-02-13 20:45:38 -05:00
2011-12-15 14:56:19 +01:00
2011-10-31 09:20:12 -04:00
2013-03-04 12:43:39 -08:00
2011-10-31 09:20:12 -04:00
2012-03-23 16:58:41 -07:00
2011-10-31 09:20:11 -04:00
2012-02-21 09:06:12 -08:00
2012-02-21 09:06:03 -08:00
2012-02-21 09:03:43 -08:00
2012-02-21 09:06:13 -08:00
2012-02-21 09:06:10 -08:00
2012-02-21 09:42:30 -08:00
2012-02-21 09:06:07 -08:00
2013-02-08 15:14:25 -08:00
2012-02-21 09:06:07 -08:00
2012-02-10 09:04:49 +01:00
2012-01-22 15:08:46 -05:00
2013-02-20 02:50:30 -08:00
2011-12-06 08:16:49 +01:00
2011-12-14 14:54:22 -08:00
2011-12-11 10:33:18 -08:00
2012-03-28 18:30:03 +01:00
2012-01-17 16:16:55 -05:00
2011-10-31 09:20:12 -04:00
2012-03-28 15:58:21 -07:00
2012-03-28 17:14:35 -07:00
2012-03-20 10:32:09 -07:00
2012-03-23 13:18:57 +01:00
2012-02-21 09:06:08 -08:00
2011-10-31 09:20:12 -04:00
2011-11-06 19:44:47 -08:00
2011-10-31 17:30:44 -07:00
2013-03-04 12:48:15 -08:00
2013-02-08 15:14:28 -08:00
2013-02-25 11:25:46 -08:00
2011-09-19 17:04:37 -07:00
2012-03-15 18:17:55 -07:00
2013-02-08 15:14:30 -08:00
2012-02-24 10:05:59 +01:00
2011-12-15 14:56:19 +01:00
2011-10-31 09:20:12 -04:00
2011-10-31 09:20:12 -04:00
2011-10-31 09:20:12 -04:00
2011-10-31 09:20:12 -04:00
2011-11-06 19:44:47 -08:00
2011-10-31 09:20:12 -04:00
2011-12-21 10:07:39 +01:00
2012-03-23 16:58:32 -07:00
2013-03-04 12:48:24 -08:00