Lai Jiangshan
960bd11bf2
workqueue: always clear WORKER_REBIND in busy_worker_rebind_fn()
busy_worker_rebind_fn() didn't clear WORKER_REBIND if rebinding failed
(CPU is down again). This used to be okay because the flag wasn't
used for anything else.
However, after 25511a477 "workqueue: reimplement CPU online rebinding
to handle idle workers", WORKER_REBIND is also used to command idle
workers to rebind. If not cleared, the worker may confuse the next
CPU_UP cycle by having REBIND spuriously set or oops / get stuck by
prematurely calling idle_worker_rebind().
WARNING: at /work/os/wq/kernel/workqueue.c:1323 worker_thread+0x4cd/0x5
00()
Hardware name: Bochs
Modules linked in: test_wq(O-)
Pid: 33, comm: kworker/1:1 Tainted: G O 3.6.0-rc1-work+ #3
Call Trace:
[<ffffffff8109039f>] warn_slowpath_common+0x7f/0xc0
[<ffffffff810903fa>] warn_slowpath_null+0x1a/0x20
[<ffffffff810b3f1d>] worker_thread+0x4cd/0x500
[<ffffffff810bc16e>] kthread+0xbe/0xd0
[<ffffffff81bd2664>] kernel_thread_helper+0x4/0x10
---[ end trace e977cf20f4661968 ]---
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<ffffffff810b3db0>] worker_thread+0x360/0x500
PGD 0
Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
Modules linked in: test_wq(O-)
CPU 0
Pid: 33, comm: kworker/1:1 Tainted: G W O 3.6.0-rc1-work+ #3 Bochs Bochs
RIP: 0010:[<ffffffff810b3db0>] [<ffffffff810b3db0>] worker_thread+0x360/0x500
RSP: 0018:ffff88001e1c9de0 EFLAGS: 00010086
RAX: 0000000000000000 RBX: ffff88001e633e00 RCX: 0000000000004140
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000009
RBP: ffff88001e1c9ea0 R08: 0000000000000000 R09: 0000000000000001
R10: 0000000000000002 R11: 0000000000000000 R12: ffff88001fc8d580
R13: ffff88001fc8d590 R14: ffff88001e633e20 R15: ffff88001e1c6900
FS: 0000000000000000(0000) GS:ffff88001fc00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 0000000000000000 CR3: 00000000130e8000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process kworker/1:1 (pid: 33, threadinfo ffff88001e1c8000, task ffff88001e1c6900)
Stack:
ffff880000000000 ffff88001e1c9e40 0000000000000001 ffff88001e1c8010
ffff88001e519c78 ffff88001e1c9e58 ffff88001e1c6900 ffff88001e1c6900
ffff88001e1c6900 ffff88001e1c6900 ffff88001fc8d340 ffff88001fc8d340
Call Trace:
[<ffffffff810bc16e>] kthread+0xbe/0xd0
[<ffffffff81bd2664>] kernel_thread_helper+0x4/0x10
Code: b1 00 f6 43 48 02 0f 85 91 01 00 00 48 8b 43 38 48 89 df 48 8b 00 48 89 45 90 e8 ac f0 ff ff 3c 01 0f 85 60 01 00 00 48 8b 53 50 <8b> 02 83 e8 01 85 c0 89 02 0f 84 3b 01 00 00 48 8b 43 38 48 8b
RIP [<ffffffff810b3db0>] worker_thread+0x360/0x500
RSP <ffff88001e1c9de0>
CR2: 0000000000000000
There was no reason to keep WORKER_REBIND on failure in the first
place - WORKER_UNBOUND is guaranteed to be set in such cases
preventing incorrectly activating concurrency management. Always
clear WORKER_REBIND.
tj: Updated comment and description.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
2012-09-17 15:42:31 -07:00
..
2012-07-21 10:34:00 -07:00
2012-07-30 11:27:25 +02:00
2011-07-26 16:49:45 -07:00
2012-07-31 20:44:03 -07:00
2012-07-30 17:25:13 -07:00
2012-07-31 15:34:13 -07:00
2012-07-22 11:35:46 -07:00
2012-07-26 11:14:49 -07:00
2012-01-08 12:19:57 -08:00
2012-07-20 09:07:37 +01:00
2012-07-14 16:37:27 +04:00
2012-07-14 16:35:02 +04:00
2012-08-01 10:26:23 -07:00
2012-01-17 16:16:57 -05:00
2012-01-17 16:17:01 -05:00
2012-04-14 11:13:20 +10:00
2012-05-15 14:59:24 -07:00
2012-04-01 12:09:55 -07:00
2012-07-24 17:47:44 -07:00
2012-05-21 23:52:30 -04:00
2011-07-25 20:57:15 -07:00
2012-05-31 17:49:27 -07:00
2012-07-31 18:42:44 -07:00
2012-07-24 13:53:28 +02:00
2011-11-06 19:44:47 -08:00
2012-05-23 22:11:41 -04:00
2011-07-14 12:59:14 +03:00
2012-03-28 18:30:03 +01:00
2012-07-26 13:36:43 -07:00
2012-04-19 15:06:55 -07:00
2012-07-31 18:42:43 -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
2012-05-03 03:29:33 -07:00
2012-07-11 23:34:39 +02:00
2012-04-25 12:39:25 +02: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
2012-05-29 16:22:32 -07:00
2012-05-31 17:49:32 -07:00
2012-03-23 13:18:57 +01:00
2012-03-23 13:18:57 +01:00
2012-07-30 17:25:20 -07:00
2012-04-11 18:24:37 -03:00
2012-07-30 17:25:20 -07:00
2012-03-05 15:49:42 -08:00
2011-10-31 09:20:13 -04:00
2012-07-22 10:15:28 -07:00
2011-10-31 09:20:12 -04:00
2012-05-29 23:28:41 -04:00
2011-10-31 09:20:12 -04:00
2012-02-21 09:06:06 -08:00
2012-06-01 10:34:35 -07:00
2012-05-23 22:28:53 +09: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
2012-07-30 17:25:13 -07:00
2012-05-04 17:28:18 -07:00
2012-06-20 14:39:36 -07:00
2012-05-24 00:28:21 -04:00
2011-12-15 14:56:19 +01:00
2011-10-31 09:20:12 -04:00
2012-07-30 17:25:14 -07:00
2011-10-31 09:20:12 -04:00
2012-05-03 03:28:51 -07:00
2011-10-31 09:20:11 -04:00
2012-02-21 09:06:12 -08:00
2012-07-02 12:34:23 -07:00
2012-07-06 06:01:48 -07:00
2012-07-02 12:34:25 -07:00
2012-07-06 06:01:49 -07:00
2012-07-06 06:01:48 -07:00
2012-07-06 06:01:49 -07:00
2012-07-06 06:01:48 -07:00
2012-07-06 05:59:30 -07:00
2012-06-13 21:16:42 +02:00
2012-05-29 16:22:27 -07:00
2012-07-30 17:25:21 -07: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-04-18 12:24:52 +10:00
2012-04-05 17:15:55 -07:00
2012-07-22 23:57:54 +04:00
2012-06-05 17:27:14 +02:00
2012-05-24 22:58:08 +02:00
2012-06-11 15:07:52 +02:00
2012-07-31 18:42:45 -07:00
2012-03-23 13:18:57 +01:00
2012-04-30 10:48:25 -07:00
2011-10-31 09:20:12 -04:00
2011-11-06 19:44:47 -08:00
2012-05-31 17:49:32 -07:00
2012-07-30 17:25:13 -07:00
2012-07-31 18:42:40 -07:00
2012-08-01 10:26:23 -07:00
2012-07-22 23:57:57 +04:00
2012-07-30 17:25:21 -07:00
2012-03-15 18:17:55 -07:00
2012-06-06 13:49:02 +02:00
2012-02-24 10:05:59 +01:00
2011-12-15 14:56:19 +01:00
2012-05-03 03:28:41 -07:00
2011-10-31 09:20:12 -04:00
2012-05-03 03:28:38 -07:00
2011-10-31 09:20:12 -04:00
2012-05-19 15:44:40 -06:00
2011-11-06 19:44:47 -08:00
2012-04-07 16:55:51 -07:00
2011-12-21 10:07:39 +01:00
2012-07-30 17:25:13 -07:00
2012-09-17 15:42:31 -07:00